2012-02-10 26 views
0

不匹配我試圖讓一個單擊事件綁定到身體的指定部分未檢查的所有無線電輸入。我還希望將來綁定到任何新的未經檢查的無線電廣播輸入。使用:內部檢查:不與.on()

基於文檔(.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

既然你在使用#stuffon將事件bubling的幫助,由當時的事件達到#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

+0

好吧,我明白你的意思。但是這打破了可點擊的標籤。 – 2012-02-10 21:59:11

+0

修正了看看http://jsfiddle.net/vdQGb/5/。還更新了答案。 – ShankarSangoli 2012-02-10 22:04:18

+0

你檢查了這個http://jsfiddle.net/vdQGb/5/嗎? – ShankarSangoli 2012-02-10 22:17:59