1

次の HTML では、特定のラジオグループに対して選択されたラジオグループ オプションのみを取得したいと考えています。

これがどのように機能するかです。基本的には、ユーザーにWebページで必要な値を入力させ、同時に利用可能なラジオグループオプションを選択させます-この場合ははい/いいえですが、次にしたいのはボタンを押したときにページをスキャンすると、選択したラジオグループ オプションが表示されます。

したがって、次の HTML コードに基づいて、"married" という名前のラジオ グループに対して "YES" を選択し、"children" という名前のラジオ グループに対して "いいえ" を選択した場合、今のところ、画面に警告します。

YES
NO

だけでなく

YES
YES
NO
NO

私は .each 関数を使用してページ上のすべての要素をスキャンし、タイプが「ラジオ」であるかどうかも確認していますが、残念ながら重複した応答を取得しています。これは望ましくありません。

ページをスキャンして、ラジオグループごとに YES と NO だけを返すにはどうすればよいですか?

<fieldset class="radio_group" tabindex="-1" id="MARRIED_RG">
<table class="radiogroup" datatable="0" role="presentation" summary="">
<tbody><tr>
<td nowrap="nowrap">
<input type="radio" class="tooltip" value="YES" name="married" id="MARRIED_RG_0"><label for="MARRIED_RG_0">Yes</label></td><td nowrap="nowrap">
<input type="radio" class="tooltip" value="NO" name="married" id="MARRIED_RG_1"><label for="MARRIED_RG_1">No</label></td></tr></tbody></table>
</fieldset>


<fieldset class="radio_group" tabindex="-1" id="CHILDREN_RG">
<table class="radiogroup" datatable="0" role="presentation" summary="">
<tbody><tr>
<td nowrap="nowrap">
<input type="radio" class="tooltip" value="YES" name="children" id="CHILDREN_RG_0"><label for="CHILDREN_RG_0">Yes</label></td><td nowrap="nowrap">
<input type="radio" class="tooltip" value="NO" name="children" id="CHILDREN_RG_1"><label for="CHILDREN_RG_1">No</label></td></tr></tbody></table>
</fieldset>

上記に基づいて、基本的にラジオグループの結果を繰り返さない手段が必要です-個別の値が必要です。

私のコードは次のようなものです:

$(':radio').each(function() { // loop through each radio button
        nam = $(this).attr('name'); // get the name of its set
        if ($(':radio[name="'+nam+'"]:checked').length > 0) { 
        // see if any button in the set is checked
            alert(nam);
        }
    });

したがって、上記の HTML を使用したこのコードに基づいて、正しい値を取得しますが、.each 関数を使用しているため、ラジオグループのすべての行が返されます。

MARRIED_RG_0    YES
MARRIED_RG_1    YES
CHILDREN_RG_0   NO
CHILDREN_RG_1   NO

私は戻りたいだけです:

MARRIED_RG_0    YES
CHILDREN_RG_1   NO
4

2 に答える 2

1

それを行うにはもっと賢い方法があるかもしれませんが、最初にラジオボタンセットのリストを収集してから、すべてのラジオボタンの代わりにそのリストを繰り返すことができます。

var sets = [];

// first get all unique sets
$(':radio').each(function () {
    var name = $(this).attr('name');
    if ($.inArray(name, sets) === -1) {
        sets.push(name);
    }
});

// then loop through the sets
$.each(sets, function (index, set) {
    if ($(':radio[name="' + set + '"]:checked').length > 0) {
        // see if any button in the set is checked
        alert(set);
    }
});

デモ: http: //jsfiddle.net/SF4qj/

于 2013-03-07T12:10:57.103 に答える
1

.each() 以外のものを使用できる場合は、次のようなものを試すことができます。

$("input:radio[name='married']:checked").val()
$("input:radio[name='children']:checked").val()

質問が明確になった後に編集:$(this).is(":checked")の代わりに試してください$(':radio[name="'+nam+'"]:checked').length > 0

$('input:radio').each(function() { // loop through each radio button
    nam = $(this).attr('name'); // get the name of its set
    if ($(this).is(":checked")) { 
        alert(nam + ": " + $(this).val());
    }
});
于 2013-03-07T07:58:49.053 に答える