我知道我们可以使用jQuery on()函数附加事件,并再次使用off()删除它们。
在一个现有的项目中,我有时会遇到类似这样的代码:
$("#SomeId").off("click").on("click");
或者有时使用类似于这样的命名空间时:
$("#SomeId").off("click.namespace").on("click.namespace");
据我所知,只能将单个事件附加到事件的特定命名空间。
例如,如果我只是打开(“点击”),它将附加我指定的功能,覆盖当前分配的功能,添加到“点击”事件。
如果我打开(“click.namespace”),它将附加我指定的函数覆盖分配的当前功能,添加到click.namespace。
如果on()已经替换分配给指定事件/ event.namespace的任何函数,通过链接关闭(“单击”)到on(“单击”)来删除任何事件的要点是什么?
我们的代码中有多余的语法,还是有一个我错过的原因?
编辑 – 谢谢kapa
我现在觉得有点傻,我纠正了我上面的错误知识。几次执行on(“click.namespace1”)我现在观察到数据(“事件”)对象不断添加到点击事件数组。
我认为这里回答了我自己的问题。这就是为什么会使用off(“event.namespace”)来确保没有其他附加到那个确切的事件/ event.namespace。
解决方法
实际上,您可以将多个事件处理程序附加到同一个事件中,而不仅仅是一个。即使使用命名空间。查看
this quick demo。
实际上,命名空间的一个优点是您可以标记一组事件处理程序,并且稍后可以轻松地删除它们,以避免多次附加它们。这是这条线呢?
$("#SomeId").off("click.namespace").on("click.namespace");