Подтвердить что ты не робот

Как лучше обрабатывать события

Если у меня есть несколько событий в элементе, я в настоящее время обрабатываю эти события, как описано здесь:

$("body").on("click", ".element", function(e) {
    // Do something on click
});

$("body").on("change", ".element", function(e) {
    // Do something on change
});

Есть ли способ объединить все события в элементе в одном вызове on()? Какова наилучшая практика, если есть несколько событий, связанных с одним элементом?

$("body").on("change click", ".element", function(e) {
    // Can I detect here if it was change or click event and perform an action accordingly?
});
4b9b3361

Ответ 1

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

$('body').on('change click', '.element', function(e) {
    if (e.type == 'click') {
        // do something...
    } 
    else if (e.type == 'change') {  
        // do something else...
    }
});

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

$('body').on({
    click: function() {
        // do something on click...
    },
    change: function() {
        // do something on change...
    }
}, '.element');

Лично я бы использовал последний метод. Весь смысл иметь унифицированный обработчик on() отрицается при использовании довольно уродливого оператора if для разделения типов событий.

Ответ 2

Да! jQuery передает объект события, который содержит информацию о событии:

$("body").on("change click", ".element", function(e) {
    console.log(e.type);
});

Ответ 3

Вы можете использовать event.type. Некоторые скажут, что это плохая практика, а другие могут оказаться полезными.

$("body").on("change click", ".element", function(event) {
    switch (event.type) {
        case 'click':

        break;
        case 'change':

        break;
        default:
    }
});

jQuery event.type

Ответ 4

$('#element').on('keyup keypress blur change', function(event) {
    alert(event.type); // keyup OR keypress OR blur OR change
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" id="element" />