1

在下面的 HTML 中,我只想检索为该特定无线电组选择的无线电组选项。

这是我希望它的工作方式,我基本上会让用户在网页上输入所需的值,同时选择他们可用的无线电组选项 - 这种情况是/否,但我想当他们按下按钮时扫描页面,然后只会显示他们选择了哪些无线电组选项。

因此,基于以下 HTML 代码,如果对于名为“married”的无线电组,他们选择了“YES”,而对于名为“children”的无线电组,他们选择了“No”,那么我现在想提醒屏幕:

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

如果你可以使用不同于 .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 回答
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 回答