2013-04-04 83 views
2

我有一個簡單的腳本,只能使用一次。如果我單擊表格行內的任意位置,我的腳本將檢查一個複選框。但是,如果我在行內點擊第二,第三等時間,那麼它不再工作。爲什麼?我現在正在使用jQuery 1.9.1。我的腳本以前工作時,我使用jQuery 1.8與live()而不是on()爲什麼jquery的on()只能工作一次?

HTML:

<tr class="row"> 
    <td><input type="checkbox"></td> 
</tr> 

的jQuery:

$(document).ready(function(){ 
    $("body").on("click",".row",function(){ 
     var loc = $(this).find('input'); 
     var ischecked = loc.attr("checked"); 
     if(ischecked) { 
      loc.attr("checked", false); 
     } else { 
      loc.attr("checked", true); 
     } 
    }); 
}); 
+5

我想你應該使用'loc.prop(「checked」)',而不是'.attr()'。 – Barmar 2013-04-04 04:00:57

+1

將「checked」attr設置爲true或false與選中或未選中的複選框無關。只要屬性在那裏,它就會被檢查。 – Antony 2013-04-04 04:01:36

+0

您應該添加和刪除該屬性,而不是將其設置爲true或orfalse。 – box86rowh 2013-04-04 04:02:25

回答

1

您需要更換與道具ATTR如下

$(document).ready(function(){ 
    $("body").on("click",".row",function(){ 
     var loc = $(this).find('input'); 
     var ischecked = loc.attr("checked"); 
     if(ischecked) { 
      loc.prop("checked", false); 
     } else { 
      loc.prop("checked", true); 
     } 
    }); 
}); 

jsfiddler

0

checked屬性是有在<input />,從不介意它的價值,它成爲檢查。所以替換以下:

loc.attr("checked", false); 

有了:

loc.prop("checked", false); 

或者,你可以在一個單一的代碼行這樣做是這樣的:

loc.prop("checked", !loc.prop("checked"));