将jQuery off()应用于一个表列

将jQuery off()应用于一个表列,jquery,html-table,cell,Jquery,Html Table,Cell,我将jQueryon()应用于每个表行。用户单击任意行后,另一个页面开始加载: table_tag.on("click", "tbody tr", function(event) { var search_id = datatable.fnGetData(this)[0]; if(event.ctrlKey) {

我将jQuery
on()
应用于每个表行。用户单击任意行后,另一个页面开始加载:

table_tag.on("click", "tbody tr", function(event) {                
    var search_id = datatable.fnGetData(this)[0];                                
    if(event.ctrlKey) {                                                                                        
        window.open("/search/"+search_id+"/");
    } else {
        window.location.assign("/search/"+search_id+"/");
    }
});
我在表中添加了一个新列。每个单元格只有一个复选框:

<td><input type="checkbox" /></td>

但它不起作用。我该怎么做?

您在
“tbody tr td input:parent”
上没有处理程序。您只有一个处理程序,位于
“tbody tr”

相反,要更加小心绑定到什么:
“tbody tr:not(input:checkbox)”
应该更好

编辑:正如Popleak所说,这个问题并不清楚。以上是为了防止在用户单击复选框时加载新页面(否则我认为复选框有些无用)。如果您的目的是在单击设置了复选框的行时不允许打开新页面,这是我看到的问题的另一种解释,那么将上述补丁应用于选择器,并从处理程序中检查复选框状态

EDIT2:缺少冒号时出错<代码>非(…)不正确,应为
:非(…)


编辑过多:,使用
tbody tr td:not(:has(输入:复选框))

当前您正试图从td中删除单击事件,但已将其应用于tr

你想要达到的目标是模棱两可的。你要么只尝试做一次,在这种情况下使用一次()

或者,您不希望单击复选框冒泡并触发对tr的单击

table_tag.on("click", "tbody tr", function(event) { 
     if (this.target!=event) return; // will ONLY catch the tr being clicked
     ...

或者别的什么

他说他试过:
table_tag.off(“单击”,“tbody tr td input:parent”)
@JSuar:没错。而且他没有
表标签。在(“单击”,“tbody tr td input:parent”)
上。无法删除没有的处理程序。表中的每一行都有input checkbox元素作为第一个单元格。我需要防止新页面加载时,用户只点击这个复选框。当他单击其他行元素时,页面必须更改。这就是我的意思。@user1459172:那么是的,只需按照上述更改
on()
选择器,以限制处理程序在复选框上激活。我尝试过,但在单击“所有行空间”复选框后,页面不会更改为另一个。您绑定到tr,但关闭了“绑定到td的单击”
table_tag.one("click", "tbody tr", function(event) {   ...
table_tag.on("click", "tbody tr", function(event) { 
     if (this.target!=event) return; // will ONLY catch the tr being clicked
     ...