关闭特定点击事件

时间:2015-10-09 19:17:43

标签: javascript jquery html events

JSFIDDLE:http://jsfiddle.net/w55usyqk/

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

$("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]行中执行某些操作;还是不能在不关闭另一个的情况下关闭一个?

如果以前发布过,我确实试过寻找答案。我认为这是难以言喻的问题之一,所以虽然可能有答案,但很难确定。

2 个答案:

答案 0 :(得分:4)

使用命名函数作为事件处理程序,因此您可以引用要取消绑定的处理程序:

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); });

答案 1 :(得分:4)

您可以使用命名空间轻松完成此操作。创建事件处理程序时,请在事件后添加命名空间。例如:

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

<强> jsFiddle example

namespaces for events上的其他内容:

  

事件名称可以由简化的事件名称空间限定   删除或触发事件。例如,"click.myPlugin.simple"   为此特定定义了myPlugin和简单命名空间   点击事件。通过该字符串附加的单击事件处理程序可以是   已删除,.off("click.myPlugin").off("click.simple")没有   令人不安的其他点击处理程序附加到元素。命名空间   类似于CSS类,因为它们不是分层的;只有一个   名称需要匹配。以下划线开头的命名空间是   保留给jQuery使用。