Событие jquery для документа с пространством имен не работает должным образом

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)
  • но для глобальных событий кажется, что добавление пространств имен не позволяет нам ограничивать, какие обработчики вызываются. Это похоже на то, что не имеет значения, какое пространство имен вы добавляете. Там должен быть только соответствующий тип события.

пример:

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

Это ожидаемое поведение? Или ошибка?

Теги:
namespaces
custom-events

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!)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню