2013-10-25 3 views
0

Я столкнулся с каким-то поведением, которого я не ожидал. Я не уверен, что это ошибка в jQuery или просто работает именно так.
http://jsfiddle.net/7fRes/4/Событие 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!)