使用Jquery off()。on()或只是on()

我知道我们可以使用jQuery on()函数附加事件,并使用off()再次删除它们。

在现有项目中,我有时会遇到类似于此的代码:

 $("#SomeId").off("click").on("click"); 

或者有时使用类似于此的命名空间:

 $("#SomeId").off("click.namespace").on("click.namespace"); 

据我所知,您只能将单个事件附加到事件的特定命名空间。

例如,如果我只是on("click") ,它将附加我指定的函数, 覆盖当前分配的函数 ,添加到“click”事件。

如果我这样做on("click.namespace")它将附加我指定的函数覆盖当前分配的函数 ,添加到click.namespace

如果on()已经替换了分配给指定event / event.namespace的任何函数,那么通过将off("click")链接到on("click) off("click")来删除任何事件的重点是什么?

它是我们代码中的冗余语法还是我错过了它的原因?

编辑 – 谢谢你kapa
我现在觉得有点傻,我纠正了上面的错误知识。 多次执行on("click.namespace1")我现在观察到data("events")对象不断添加到click事件数组中。

我想那里回答了我自己的问题。 这就是为什么人们会使用off("event.namespace")来确保没有其他东西附加到那个确切的event / event.namespace。

实际上,您可以将多个事件处理程序附加到同一事件,而不仅仅是一个。 即使使用名称空间。 看看这个快速演示 。

实际上,命名空间的一个优点是您可以标记一组事件处理程序,并在以后轻松删除它们以避免多次附加它们。 这就是这一行:

 $("#SomeId").off("click.namespace").on("click.namespace"); 

如果存在现有的错误(因为你可能有多个,在这种情况下,他们将链接),并且它调用.stopPropagation() ,那么你的汉德将不会被调用。 如上所述编写代码可以避免此问题。