Javascript 关闭特定的单击事件

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() { $("

JSFIDDLE:

单击div时,会触发两个单独的单击事件。它们在控制台日志中分别打印“click”和“clicked”

$("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/…选择了这个答案,即选择您实际使用的答案。我之所以选择使用名称空间,是因为我认为这样可以减少代码的混乱。我感谢你的帮助!