2013-10-25 29 views
0

我遇到了一些我沒想到的行爲。我不確定這是否是jQuery中的錯誤,或者它只是以這種方式工作。
​​jquery事件與命名空間不符合預期的文檔

我們的應用程序產生相當我們想要的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) 

這是預期的行爲?還是一個錯誤?

回答

0

看來這是/是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!)