我点击后应用以下代码使表行选中/取消选中子复选框。现在我发现当点击行内的复选框本身时,它会进行检查。可能是它检查点击(标准功能),然后jquery选择点击事件并取消选中它?我该如何解决这个问题?
//check on div click
$("tr").live("click",function() {
var checkbox = $(this).find("input[type='checkbox']");
if( checkbox.attr("checked") == "" ){
checkbox.attr("checked","true");
} else {
checkbox.attr("checked","");
}
});
答案 0 :(得分:6)
我怀疑点击事件是从复选框冒泡到tr。尝试添加此代码:
$('tr input[type=checkbox]').click(function(e){
e.stopPropagation();
});
修改强>
这是一个例子:http://jsfiddle.net/GSqNv/
答案 1 :(得分:2)
检查来电者的目标不是复选框
$("tr").live("click",function(event) {
var target = $(event.target);
if (target.is('input:checkbox')) return;
var checkbox = $(this).find("input[type='checkbox']");
if( checkbox.attr("checked") == "" ){
checkbox.attr("checked","true");
} else {
checkbox.attr("checked","");
}
});
DEMO http://jsfiddle.net/7Bze7/
上面的代码检查事件的发件人不是复选框。
答案 2 :(得分:0)
除了给定的解决方案,将复选框设置为oposite状态不是更好吗?例如:
var _current_state = checkbox.attr("checked");
checkbox.attr("checked") = !_current_state;
答案 3 :(得分:0)
怎么样:
return false;
因为它与输入两者相同:
e.preventDefault();
e.stopPropagation();
我相信这是去 - 不是吗?
答案 4 :(得分:0)
我发现您只需将div包装在标签中即可完成此操作。如果div中的内容是您要更改的内容,则不起作用,但是它将选中该复选框。