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

时间:2012-12-13 00:29:10

标签: jquery html-table cell

我将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>

我需要在用户点击此复选框后阻止加载其他页面。 我试过这个:

table_tag.off("click", "tbody tr td input:parent")

但它不起作用。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您在"tbody tr td input:parent"上没有处理程序。您在"tbody tr"上只有一个处理程序。

相反,要更加小心你绑定的内容:"tbody tr :not(input:checkbox)"应该更好。

编辑:正如popnoodles所说,问题不明确。以上是为了防止在用户点击复选框时加载新页面(否则我认为复选框有点无用)。如果您的目的是禁止打开新页面,如果您单击具有复选框设置的行,这是我可以看到的问题的另一种解释,然后将上述补丁应用于您的选择器,另外从内部检查复选框状态处理程序。

EDIT2:结果丢失时出错; not(...)不正确,应为:not(...)

EDIT-too-much:Fiddletbody tr td:not(:has(input:checkbox))

答案 1 :(得分:0)

目前您正在尝试从td中删除点击事件,但您已将其应用于tr。

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

table_tag.one("click", "tbody tr", function(event) {   ...

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

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

或其他