jQuery 事件有一个内置的命名空间概念,可以轻松安全地解除您添加的事件的绑定。
然而,当不同的插件触发相同的基本事件时,这些命名空间并不能防止冲突。例如,如果插件 A 触发hide.foo
事件而插件 B 触发hide.bar
事件,则任何侦听hide
事件的处理程序都将被调用两次,即使使用命名空间也是如此。
当插件触发过于通用的名称(如open
, close
, show
, hide
, start
,end
等)时,这可能会导致问题,但是那里有如此多的插件(甚至来自 jQueryUI 和 bootstrap 等大型库的插件)在没有二级命名空间的情况下触发这些通用事件。
所以这是我的问题。似乎第二级命名空间是谨慎的,既可以将您的事件与其他插件和标准 DOM 事件区分开来。约定可能类似于namespace:eventName
或namespace:eventName.secondaryNamespace
使用标准的 jQuery 点表示法。
但似乎没有人这样做,所以我想知道是否有一些令人信服的理由不这样做。有人知道吗?
更新:
举一个更具体的例子,假设我正在使用插件 A,当用户将鼠标悬停在某些文本上时,它会触发工具提示上的show
和 事件。hide
由于事件传播并且我的 DOM 不断变化,我决定将我的事件侦听器绑定到元素以从所有工具提示document
中捕获show
和事件。hide
然后,几周后,我将插件 B 添加到我的应用程序中,这也会hide
在用户关闭警报消息后触发事件。现在突然之间,我的工具提示代码将被调用超过我想要的,因为工具提示和警报消息插件都在触发具有相同名称的事件。