将jQuery off()应用于一个表列
我将jQuery将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) {
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
...