2

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

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")

但它不起作用。我怎样才能做到这一点?

4

2 回答 2

2

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

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

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

EDIT2:缺少冒号的错误;not(...)不正确,应该是:not(...)

编辑太多:Fiddle, with tbody tr td:not(:has(input:checkbox)).

于 2012-12-13T00:32:04.953 回答
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
     ...

或者是其他东西

于 2012-12-13T00:36:39.207 回答