Javascript each()不更新

Javascript each()不更新,javascript,jquery,Javascript,Jquery,我试图检查是否选择了一组单选按钮。但是,如果在事件发生后选择了收音机,则它似乎不会更新 守则: $('button#submit').click(function() { var addr_chkd = 0; $('input:radio[name="address"]').each(function() { if (!$(this).attr('checked')) addr_chkd++ }); }); if (addr_c

我试图检查是否选择了一组单选按钮。但是,如果在事件发生后选择了收音机,则它似乎不会更新

守则:

$('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\u chkd
仍返回大于零的值

[更新]

问题是我正在检查
addr\u chkd
是否大于零。我应该检查
addr\u 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');
    }
});
$(this.attr()
代替这个。

$(this.attr()
代替这个。

试试这个

$('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;
}
以上所有内容的提琴示例:

试试这个

$('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;
}

以上所有内容的提琴示例:

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

var addr_chkd = $('input:radio[name="address"]:checked').length;
或者,如果您的意思是不检查:

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

但是对于收音机输入,您可能会出错。

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

var addr_chkd = $('input:radio[name="address"]:checked').length;
或者,如果您的意思是不检查:

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

但是对于无线电输入,您可能会出错。

我不完全清楚您想做什么,但我可以用两种方式解释
addr\u 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
    }
});
$('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
    }
});
另一方面,如果“addr”表示“address”,并且您需要所选单选按钮的索引,请使用以下命令:

$('button#submit').click(function() {
    var radios = $('input:radio[name="address"]');
    var num_unchecked = radios.filter(':not(:checked)').length;
    if (num_unchecked) {
        // do something
    }
});
$('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
处理程序中。在您的示例中,它在
单击处理程序之外,这意味着它只会执行一次,甚至在按钮被单击之前执行一次。

我不完全清楚您想做什么,但我可以用两种方式解释
addr\u 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
    }
});
$('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
    }
});
另一方面,如果“addr”表示“address”,并且您需要所选单选按钮的索引,请使用以下命令:

$('button#submit').click(function() {
    var radios = $('input:radio[name="address"]');
    var num_unchecked = radios.filter(':not(:checked)').length;
    if (num_unchecked) {
        // do something
    }
});
$('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
处理程序中。在您的示例中,它位于
单击
处理程序之外,这意味着它将只执行一次,甚至在单击按钮之前执行一次。

为什么它不大于0?只有一个单选按钮将被选中是否正确?这意味着每个未选中的单选按钮的计数器都将增加。您希望代码执行什么操作?我希望确保至少选中一个单选按钮。我的逻辑可能有问题(这是不起作用的原因),但如果addr_chkd>0,则没有检查任何按钮。为什么它不大于0?只有一个单选按钮将被选中是否正确?这意味着每个未选中的单选按钮的计数器都将增加。您希望代码执行什么操作?我希望确保至少选中一个单选按钮。我的逻辑可能有问题(这是不起作用的原因),但如果addr_chkd>0,则没有检查任何按钮。我想计算未勾选单选按钮的数量。谢谢你指出if在click之外。我想数一数未勾选的单选按钮的数量。感谢您指出,if不在单击范围内。