使用:在里面检查:与.on()不匹配

时间:2012-02-10 21:27:43

标签: jquery jquery-selectors

我正在尝试将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失败?

1 个答案:

答案 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