0

我遇到了一些我没想到的行为。我不确定这是否是 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)
  • 但是对于全局事件,似乎添加命名空间不允许我们限制调用哪些处理程序。就好像你添加什么命名空间无关紧要,handers 总是被调用。只需要有一个匹配的事件类型。

例子:

$.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)

这是预期的行为吗?还是一个错误?

4

1 回答 1

0

看来这是 / 是 jQuery 中的一个错误。

将我们的应用程序升级到 jQuery 1.10.x 会得到我所期望的行为。请参阅http://jsfiddle.net/7fRes/6/

(呵呵..所以强迫我在提交答案之前在这里放一些代码..)

$.event.trigger('evName.foo');             // does NOT trigger (expected!)
$.event.trigger('evName');                 // triggers (expected!)
$.event.trigger('evName.someThing');       // triggers (expected!)
于 2013-10-25T11:49:13.303 回答