我正在尝试检查是否已选择一组单选按钮。但是,如果在事后选择了无线电,它似乎不会更新。
代码:
$('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');
}
});
答案 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()
代替此。