jQuery .each()不会更新

时间:2012-01-24 03:32:29

标签: javascript jquery

我正在尝试检查是否已选择一组单选按钮。但是,如果在事后选择了无线电,它似乎不会更新。

代码:

$('button#submit').click(function() {
    var addr_chkd = 0;
    $('input:radio[name="address"]').each(function() { 
        if (!$(this).attr('checked'))
            addr_chkd++
    });
});

if (addr_chkd)
    // do something

单击该按钮并且未选择任何内容时,代码效果很好。但是,当选择单选按钮并单击该按钮时,addr_chkd仍会返回大于零的值。

[UPDATE]

问题是我正在检查大于零的addr_chkd。我应该检查addr_chkd是否等于单选按钮的长度。我对@ PPvG的答案进行了一些修改,但它确实做到了。

$('button#submit').click(function() {
    var radios = $('input:radio[name="address"]');
    var num_unchecked = radios.filter(':not(:checked)').length;
    if (num_unchecked === radios.length) {
        alert('please select a button');
    }
});

4 个答案:

答案 0 :(得分:2)

试试这个

$('button#submit').click(function() {
    var addr_chkd = 0;
    $('input:radio:[name="address"]').each(function() { 
        if (!$(this).is(':checked'))
            addr_chkd++
    });
});

或者您可以简单地将其作为

$('button#submit').click(function() {    
    var addr_chkd = $('input:radio[name="address"]:not(:checked)').length
}

因为一次只能检查一个单选按钮,所以你也可以这样做

$('button#submit').click(function() {    
        var addr_chkd = $('input:radio[name="address"]').length - 1;
}

以上所有的例子:http://jsfiddle.net/pdm2F/

答案 1 :(得分:2)

我不清楚你要做什么,但我可以用两种方式解释addr_chkd

如果“addr”代表“adder”,并且您想要计数未经检查的单选按钮的数量,请使用:

$('button#submit').click(function() {
    var radios = $('input:radio[name="address"]');
    var num_unchecked = radios.filter(':not(:checked)').length;
    if (num_unchecked) {
        // do something
    }
});

另一方面,如果“addr”表示“地址”,并且您想要所选单选按钮的索引,请使用:

$('button#submit').click(function() {
    var radios  = $('input:radio[name="address"]');
    var checked = radios.filter(':not(:checked)').get(0);
    if (checked.length > 0) {
        var index_checked = radios.index(checked);
        // do something
    }
});

请注意,在这两种情况下,我都在if处理程序中移动了click子句。在您的示例中,它位于click处理程序之外,这意味着它只会执行一次,甚至在单击按钮之前。

答案 2 :(得分:1)

您可以使用一种简单的方法:

var addr_chkd = $('input:radio[name="address"]:checked').length;

或者如果你的意思是没有检查:

var addr_chkd = $('input:radio[name="address"]').not(':checked').length;

但是对于收音机输入,你可能会做错事。

答案 3 :(得分:0)

使用$(this).attr()代替此。