В случае, если мне нужно приложить несколько событий к одному элементу с помощью JQuery .on()
, я должен объединить все события в один вызов и дифференцировать их с помощью event.type
? или должен ли я иметь отдельный вызов .on()
для каждого события?JQuery: Лучший способ для обработки нескольких событий для лучшей производительности
Комбинированные события:
$('#main').on('mouseenter mouseleave click', '.myElement', function(event) {
if (event.type == 'click') {
return false;
} else if (event.type == 'mouseenter') {
$(this).addClass('active');
} else if (event.type == 'mouseleave') {
$(this).removeClass('active');
}
}
Отдельные события:
$('#main').on('click', '.myElement', function(event) {
return false;
}
$('#main').on('mouseenter', '.myElement', function(event) {
$(this).addClass('active');
}
$('#main').on('mouseleave', '.myElement', function(event) {
$(this).removeClass('active');
}
Какой самый быстрый?
[Редактировать] Дополнительная информация: Очевидно, что мы должны рассмотреть два аспекта, первый из них, когда завершения загрузки страницы и те события, обработчики Создаются, которые, очевидно, будет быстрее, используя только один .on()
вызов. Однако второй аспект заключается в том, когда эти события будут фактически активированы, когда мышь или нажатие .myElement
, которое, по моему мнению, более важно, поскольку оно будет происходить много раз, а вызовы .on()
будут вызываться только один раз (или больше, если DOM изменяется, но все же меньше, чем сами события).
[Протестируйте] (http://jsperf.com) – billyonecan
Вы можете попробуйте сами: http://jsperf.com/. Если речь идет только о вызове '.on' несколько раз или нет, то, конечно, лучше просто называть его один раз. Вы можете передать объект в качестве аргумента, если хотите связать несколько разных обработчиков событий: http://api.jquery.com/on/#on-events-selector-data. Если вопрос заключается в том, что один или несколько обработчиков событий «быстрее» используют JSPerf. –
Первый должен быть быстрее, поскольку он только один раз выбирает элемент '# main'. – Broxzier