2013-04-04 45 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")); 
相关问题