Что произойдет, если я назначу два обработчика событий одному и тому же событию для одного и того же элемента?
Например:
var elem = $("...")
elem.click(...);
elem.click(...);
Последний обработчик "побеждает" или оба обработчика будут запущены?
javascript
jquery
event-handling
ЭЛЕКТРОДИСТАНЦИОННАЯ СИСТЕМА УПРАВЛЕНИЯ
источник
источник
jQuery('.btn').on('click',handlerClick);
вызывается в разных местах без.off
какого-либо другого действия?bind
метод. Подробности смотрите здесь: learn.jquery.com/jquery-ui/widget-factory/…Предположим, что у вас есть два обработчика, f и g , и вы хотите убедиться, что они выполняются в известном и фиксированном порядке, а затем просто инкапсулировать их:
Таким образом, существует (с точки зрения jQuery) только один обработчик, который вызывает f и g в указанном порядке.
источник
.bind () запускается в том порядке, в котором он был связан :
Источник: http://api.jquery.com/bind/
Поскольку другие функции jQuery (например,
.click()
) являются ярлыками.bind('click', handler)
, я бы предположил, что они также запускаются в порядке их привязки.источник
Вы должны быть в состоянии использовать цепочку для выполнения событий в последовательности, например:
Я думаю, что код ниже делает то же самое
Источник: http://www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3
TFM также говорит:
источник
When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.
Оба обработчика вызываются.
Вы можете подумать о привязке встроенного события (например
"onclick=..."
), где большим недостатком является только один обработчик события.JQuery соответствует модели регистрации событий DOM уровня 2 :
источник
Сделал это успешно, используя 2 метода: инкапсуляцию Stephan202 и несколько прослушивателей событий. У меня есть 3 вкладки поиска, давайте определим их идентификаторы входного текста в массиве:
Когда содержимое searchtab1 изменяется, я хочу обновить searchtab2 и searchtab3. Сделал это так для инкапсуляции:
Несколько слушателей событий:
Мне нравятся оба метода, но программист выбрал инкапсуляцию, однако сработали и несколько слушателей событий. Мы использовали Chrome, чтобы проверить это.
источник
Существует обходной путь, гарантирующий, что один обработчик происходит за другим: присоедините второй обработчик к содержащему элементу и дайте событию всплыть. В обработчике, прикрепленном к контейнеру, вы можете посмотреть на event.target и сделать что-нибудь, если он вам интересен.
Грубый, может быть, но это определенно должно работать.
источник
jquery выполнит оба обработчика, так как он позволяет использовать несколько обработчиков событий. Я создал образец кода. Можешь попробовать
демонстрация
источник