jQuery: больше чем один обработчик для того же события

Я нашел проблемы в использовании STL в многопоточном коде. Даже если Вы не совместно используете объекты STL через потоки, много реализаций используют неориентированные на многопотоковое исполнение конструкции (как ++ для подсчета ссылок вместо взаимно блокируемого инкрементного стиля или наличия неориентированных на многопотоковое исполнение средств выделения).

В каждом из этих случаев, я все еще решил использовать STL и решить проблемы (существует достаточно рычагов для получения то, что Вы хотите).

, Даже если бы Вы решили сделать свои собственные наборы, это была бы хорошая идея следовать за стилем STL для итераторов так, чтобы можно было использовать алгоритмы и другие функции STL, которые воздействуют только на итераторы.

135
задан stephenwade 8 July 2015 в 17:53
поделиться

4 ответа

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

Обработчики будет выполняться в том порядке, в котором они были связаны .

163
ответ дан 23 November 2019 в 23:47
поделиться

Предположим, у вас есть два обработчика, f и g , и вы хотите убедиться, что они выполняются в известном и фиксированном порядке, тогда просто инкапсулируйте их:

$("...").click(function(event){
  f(event);
  g(event);
});

Таким образом, существует (с точки зрения jQuery) только один обработчик, который вызывает f и g в указанном порядке .

36
ответ дан 23 November 2019 в 23:47
поделиться

Вызываются оба обработчика.

Вы можете подумать о встроенной привязке событий (например, "onclick = ..." ), где большой недостаток состоит в том, что для события может быть установлен только один обработчик.

jQuery соответствует модели регистрации событий уровня 2 DOM :

Модель событий DOM позволяет регистрация многократного мероприятия слушатели на одном EventTarget. Чтобы добиться этого, слушатели событий не дольше хранятся как значения атрибутов

2
ответ дан 23 November 2019 в 23:47
поделиться

Вы должны иметь возможность использовать цепочку для последовательного выполнения событий, например:

$('#target')
  .bind('click',function(event) {
    alert('Hello!');
  })
  .bind('click',function(event) {
    alert('Hello again!');
  })
  .bind('click',function(event) {
    alert('Hello yet again!');
  });

Я думаю, что приведенный ниже код делает то же самое

$('#target')
      .click(function(event) {
        alert('Hello!');
      })
      .click(function(event) {
        alert('Hello again!');
      })
      .click(function(event) {
        alert('Hello yet again!');
      });

Источник: http: // www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3

TFM также говорит:

Когда событие достигает элемента, все обработчики привязаны к этому событию type для элемента увольняются. Если есть несколько обработчиков зарегистрированы, они всегда будут выполняться в том порядке, в котором были связаны. После выполнения всех обработчиков событие продолжается по нормальный путь распространения событий.

10
ответ дан 23 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: