Многоканальные обработчики событий.on('click') в jQuery

У меня есть несколько click обработчики на плагине карусели ( GitHub репо здесь).

Когда я изначально его кодировал, я забыл о цепочке jQuery:

$gallop.on("click", ".advance",  function(){ [snip 1] })
$gallop.on("click", ".retreat",  function(){ [snip 2] })
$gallop.on("click", ".autoplay", function(){ [snip 3] })
$gallop.on("click", ".picker",   function(){ [snip 4] });

Они все на одном .gallop элемент, поэтому я могу улучшить код, связав их вместе:

$gallop
    .on("click", ".advance",  function(){ [snip 1] })
    .on("click", ".retreat",  function(){ [snip 2] })
    .on("click", ".autoplay", function(){ [snip 3] })
    .on("click", ".picker",   function(){ [snip 4] });

Они также все слушают click событие: только селекторы отличаются для каждого обработчика. Есть ли способ поместить несколько элементов селектора / обработчика в один и тот же .on() метод? Что-то вроде этого?

$gallop
    .on("click", 
        ".advance",  function(){ [snip 1] },
        ".retreat",  function(){ [snip 2] },
        ".autoplay", function(){ [snip 3] },
        ".picker",   function(){ [snip 4] });

1 ответ

Решение

Не существует встроенного способа указания нескольких отдельных пар селектора / обработчика в одной .on() вызов.

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

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

$gallop.on("click", ".advance, .retreat, .autoplay, .picker", function(e) {
    // look at the class on e.target and decide what to do
})
Другие вопросы по тегам