Как привязать несколько обработчиков событий к одному событию с помощью jQuery?

Я испытываю странное поведение с jQuery при попытке присоединить более одного обработчика событий к одному событию.

Как мне связать два разных обработчика событий с одним и тем же событием?

$(this).focus(function(){/*...*/});
$(this).focus(function(){/*...*/}); // replaces the previous one?

Что мне не хватает?

Обновлять

Знаете ли вы, влияет ли это на маршрутизацию данных событий? Похоже, что добавление второго обработчика событий приводит к тому, что свойство eventObject.data возвращает undefined...?


Эпилог

Проблема была как-то связана с тем, как jQuery нормализует обработку событий и как свойство данных eventObject менялось в зависимости от маршрутизации, у меня был таймер задержки в какой-то момент, который читал свойство позже, когда оно было неопределенным, я решил это, просто создав локальный временный для него.

obj.inputText.bind('blur', obj, function(e) {
    var div = e.data.div;
    setTimeout(function() { div.hide(); }, 333); // works!
    // setTimeout(function() { e.data.div.hide(); }, 333); // does not work
});

person John Leidegren    schedule 31.03.2009    source источник
comment
существуют также события с именами: docs.jquery.com/Namespaced_Events   -  person montrealist    schedule 12.06.2009


Ответы (3)


Это работает. Я только что дважды проверил этот код:

$(document).ready(function() {
  $("#FirstName").focus(function() {
    console.log("focus1");
  });

  $("#FirstName").focus(function() {
    console.log("focus2");
  });
});

И он выдает два консольных сообщения, когда поле ввода находится в фокусе.

Вы уверены, что оба ваших обработчика не работают?

person Dave Ward    schedule 31.03.2009

Разве вы не можете создать на «мастере» функцию, которая вызывает все необходимые обработчики?

$(this).focus( function() { function1(); function2(); etc..... });

person Colin    schedule 12.06.2009

Теоретически это должно работать, попробуйте запустить все обработчики, используя:

$(this).focus( function() { alert('handler1'); });
$(this).focus( function() { alert('handler2'); });
$(this).focus();
person Pim Jager    schedule 31.03.2009