привязка одного и того же события дважды сработает дважды в jQuery 1.4.2 - PullRequest
4 голосов
/ 20 июля 2010

если вы получили что-то вроде этого:

jQuery(selector).focus(function(){...});
jQuery(selector).focus(function(){...});

фокус сработает дважды, есть ли способ исправить / предотвратить это?

Ответы [ 3 ]

8 голосов
/ 20 июля 2010

Используйте data('events') для поиска обработчиков событий:

var isBound = function(el, ev) {
    var found = false;
    $.each($(el).data("events"), function(i, e) {
        if (i === ev) {
            found = true;
        }
    });
    return found;
}

if (!isBound(selector, 'focus')) {
    $(selector).bind('focus', fn);
}

Я думаю вы можете использовать функцию .one() и в jQuery, посмотрите http://api.jquery.com/one/

3 голосов
/ 20 июля 2010

Вы можете использовать unbind , чтобы удалить более ранний обработчик.Как вы будете его использовать, зависит именно от того, почему вы пытаетесь избежать запуска обоих обработчиков.

1 голос
/ 20 июля 2010

Попробуйте использовать пространство имен события и используйте bind:

var fnFocus = function(){ ... };
$(selector).bind('focus.namespace',fnFocus);

$(selector).unbind('focus.namespace').bind('focus.namespace',fnFocus);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...