2015-04-14 3 views
1

jQuery's $.fn.one должен быть отключен после того, как событие было запущено, а слушатель запустил сценарий.jQuery.one прослушивание нескольких событий

Однако, если он прослушивает несколько событий, он не отключится для всех прослушанных событий после того, как один из них выстрелил.

Используя этот приемник событий:

var transitionend = "webkitTransitionEnd msTransitionEnd transitionend"; 

$("foo").one(transitionend , function(){ 

    foo.bar(); 

}); 

Метод foo.bar() будет выполняться 2 раза в хроме, так webkitTransitionEndtransitionend как огонь.

Я пытаюсь найти элегантный решение, при котором один из прослушиваемых методов отключает все остальные в слушателе.

+1

Вам лучше нормализовать событие, чтобы связать только релевантную, как это делается с использованием, например, библиотеки Modernizr: http://stackoverflow.com/a/9090128/1414562. Как сказано, ответ Карла должен работать так, как ожидалось, поскольку i видеть это –

ответ

4

Я думаю, что лучше всего будет просто удалить привязку после того, как событие было уволено?

Somthing как:

var transitionend = "webkitTransitionEnd msTransitionEnd transitionend"; 
$("foo").on(transitionend , function(){ 
    foo.bar(); 
    $(this).off(transitionend); 
}); 

Edit: Если вы после более элегантный вид решения (если вы должны были бы делать это любопытное дело много) он выглядит как кто-то завязал выше в к многоразовым функции на другой ответ переполнением стека: https://stackoverflow.com/a/24589200/820822

Также: jQuery's One - Fire once with multiple event types по-видимому, тот же вопрос, так что, возможно, некоторые другие полезные ответы.

Смежные вопросы