具有命名空间的文档上的 jQuery 事件未按预期运行

jquery event on document with namespace not behaving as expected

本文关键字:事件 运行 jQuery 命名空间 文档      更新时间:2023-09-26

我遇到了一些我没想到的行为。我不确定这是jQuery中的一个错误,还是它只是这样工作。
http://jsfiddle.net/7fRes/4/

我们的应用程序正在生成相当多的事件处理程序,我们希望 jQuery 在我们使用document触发器触发它们时调用它们(我认为这些被称为"全局事件"?为了更好地控制正在发生的事情,我们向它们添加了命名空间。

$(document).on('evName.someThing', function(ev) {     
    output.append('<br />' + ++counter + ' triggered! ' + new Date().getSeconds()); 
})
output.on('evName2.funkyNameSpace', function() {
    output.append('<br />' + ++counter + ' funky click!');
})

似乎在document上触发事件的行为与在特定元素上触发事件的行为不同:

  • 在特定元素上具有命名空间的事件的行为符合我们的预期:当事件类型和命名空间之间完全匹配时,将调用相应的处理程序:

例:

output.trigger('evName2');                // triggers (expected)
output.trigger('evName2.aaaaaNamespace'); // does not trigger (expected)
output.trigger('evName2.funkyNameSpace'); // triggers (expected)
  • 但是对于全局事件,添加命名空间似乎不允许我们限制调用哪些处理程序。就好像你添加什么命名空间并不重要,处理者总是被调用。只需要匹配的事件类型。

例:

$.event.trigger('evName.someThingElse');    // triggers (hmmm?)
$.event.trigger('evName.someThinggg');     // triggers (hmmm?)
$.event.trigger('evName.foo');             // triggers (hmmm?)
$.event.trigger('evName');                 // triggers (expected)
$.event.trigger('evNameeeeee');            // does not trigger (expected)

这是预期行为吗?还是错误?

这似乎是/是 jQuery 中的一个错误。

将我们的应用程序升级到jQuery 1.10.x给出了我所期望的行为。见 http://jsfiddle.net/7fRes/6/

(呵呵。。SO迫使我在提交答案之前在此处放置一些代码..)

$.event.trigger('evName.foo');             // does NOT trigger (expected!)
$.event.trigger('evName');                 // triggers (expected!)
$.event.trigger('evName.someThing');       // triggers (expected!)