我正在尝试将click事件绑定到未在正文的指定部分中检查的所有无线电输入。我也希望将来绑定到任何新的未经检查的无线电输入。
根据文档(.on,:not和:checked),我希望以下代码能够正常运行:
$(function() {
var count = 0;
$("#stuff").on("click", "div.gr input:not(:checked)", function(){
$('div.gr').append("<label class='gr'><input type='radio' name='group3'>Another input "+(++count)+"</label>");
});
});
然而它没有(jsFiddle Example)。如果您将:not(:checked)
替换为:not(.tmp)
,则可以使用jsFiddle Example。此外,如果您使用.click
,它适用于现有输入,但不会绑定到新输入(jsFiddle Example)。
为什么:not(:checked)
.on
失败?
答案 0 :(得分:0)
由于您在on
上使用了#stuff
,它将获取事件缓冲的帮助,当事件到达#stuff
时,单选按钮已经checked
,因此选择器不会匹配。
而不是click
事件使用mousedown
并将选择器更改为div.gr label
,它将正常工作。
$(function() {
var count = 0;
$("#stuff").on(
"mousedown",
"div.gr label",
function(){
console.log($(this).find('input'));
if(!$(this).find('input').is(':checked')){
$('div.gr').append("<label class='gr'><input type='radio' name='group3'>Another input "+(++count)+"</label>");
}
});
});
<强> Demo 强>