使用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() ,那么你的汉德将不会被调用。 如上所述编写代码可以避免此问题。