Javascript 关闭特定的单击事件
JSFIDDLE: 单击div时,会触发两个单独的单击事件。它们在控制台日志中分别打印“click”和“clicked”Javascript 关闭特定的单击事件,javascript,jquery,html,events,Javascript,Jquery,Html,Events,JSFIDDLE: 单击div时,会触发两个单独的单击事件。它们在控制台日志中分别打印“click”和“clicked” $("div").on("click", function() { console.log("click"); }); $("div").on("click", function() { console.log("clicked"); }); 如果点击该按钮,它将从div对象中删除两个事件声明 $("button").on("click", function() { $("
$("div").on("click", function() { console.log("click"); });
$("div").on("click", function() { console.log("clicked"); });
如果点击该按钮,它将从div对象中删除两个事件声明
$("button").on("click", function() { $("div").off("click"); });
但是,如果我只需要删除一个单击事件,该怎么办?这是否存储在某种类型的事件数组中,在该数组中,我可以按照$(“div”).off(“click”)[1]
;或者不关闭另一个就不可能关闭其中一个
我确实尝试过寻找答案,如果它以前被发布过的话。我认为这是一个很难回答的问题,因此尽管可能有答案,但很难确定。使用命名函数作为事件处理程序,这样您就可以引用要解除绑定的处理程序:
function clicOne() {console.log("click");};
function clicTwo() {console.log("clicked");};
$("div").on("click", clickOne);
$("div").on("click", clicTwo);
$("button").on("click", function() { $("div").off("click", clickOne); });
您可以使用名称空间轻松地完成这项工作。创建事件处理程序时,请在事件后添加命名空间。例:
$("div").on("click.namespace1", function() { console.log("click"); });
$("div").on("click.namespace2", function() { console.log("clicked"); });
然后,对于按钮,使用要删除的事件的命名空间:
// remove only the event for namespace2
$("button").on("click", function() { $("div").off(".namespace2"); });
更多关于:
事件名称可以由简化的事件名称空间限定
删除或触发事件。例如,“单击.myPlugin.simple”
定义此特定应用程序的myPlugin和简单名称空间
单击事件。通过该字符串附加的click事件处理程序可以是
使用.off(“click.myPlugin”)
或.off(“click.simple”)
删除
干扰附加到图元的其他单击处理程序。名称空间
类似于CSS类,因为它们不是分层的;只有一个
名称需要匹配。以下划线开头的命名空间是
保留供jQuery使用
您可以使用
this
获取单击的div
并关闭该处理程序<代码>$(此).off(“单击”)@tymeJV感谢您的回复$(本)关闭(“点击”);仍将从对象中删除所有单击事件。我只想删除一个点击事件。谢谢!这很好用。我真的很感激!对于其他可能觉得这个问题有帮助的人,我把它插入了原来的提琴中,以便更容易看到。虽然你的答案正确,但我还是选择了接受另一个答案,即选择你实际使用的答案。在使用名称空间时,我选择了另一个答案,因为我认为这会减少代码的混乱。没有怨恨,我感谢你的帮助!杰出的这也非常有效。我以前从未听说过使用事件名称空间。谢谢你指出!这太棒了。我不知道这是可能的@j08691谢谢分享!尽管另一个答案是正确的,但我还是按照meta.stackexchange.com/questions/13396/…选择了这个答案,即选择您实际使用的答案。我之所以选择使用名称空间,是因为我认为这样可以减少代码的混乱。我感谢你的帮助!