В попытке написать лучший код и улучшить то, как я использую jQuery, я недавно кое-что читал. Один из новых советов, который я усвоил, — использование делегирования событий с помощью jQuery.
Во время чтения я обнаружил два «предполагаемых» разных метода решения этой проблемы. Ниже приведены фрагменты кода, иллюстрирующие их.
Предполагая, что у меня есть такой блок HTML:
<html>
<head>
<title>Test Code</title>
</head>
<body>
<div id="switcher">
<button id="button1">Button 1</button>
<button id="button2">Button 1</button>
<button id="button3">Button 2</button>
<button id="button4">Button 3</button>
<button id="button5">Button 4</button>
<button id="button5">Button 5</button>
<button id="button6">Button 6</button>
<button id="button7">Button 7</button>
<button id="button8">Button 8</button>
<button id="button9">Button 9</button>
</div>
<!-- rest of code here -->
</body>
</html>
При нажатии я хочу:
- Получить идентификатор нажатой кнопки (для дальнейших манипуляций).
- Переключите класс на «активный» для любой из кнопок.
Вместо этого:
$('#switcher').find('button').click(function(){
var $element = $(this);
var elementid = this.id;
$element.toggleClass('clicked');
//rest of code here
});
Я могу сделать это (метод 1)
$('#switcher').click(function(eventName){
if ($(eventName.target).is('button')) {
var $element =$(eventName.target);
var elementid = eventName.target.id;
$element.toggleClass('active');
//rest of code here
}
});
Или так (метод 2)
$('#switcher').on('click', 'button', function(){
var $element = $(this);
var elementid = this.id;
$element.toggleClass('active');
//rest of code here
});
- Являются ли эти 2 метода делегирования на самом деле обеими?
- Если да, то какой из двух методов быстрее (или лучше с точки зрения производительности) и лучше обрабатывает делегирование?
- Есть ли ограничения браузера?
$(eventName.target).is('button')
- person Bergi   schedule 05.10.2016if ($(eventName.target).closest('button').length)
. А что касается события с одним щелчком мыши, единственной проблемой, связанной с производительностью, должно быть время на ремонтопригодность. Скоростные характеристики здесь не имеют значения - person A. Wolff   schedule 05.10.2016.on()
(с делегированием или без) также предпочтительнее, потому что вы можете создавать имена для ваших событий и очень легко.off()
конкретных обработчиков. - person mhodges   schedule 05.10.2016$element.id
вряд ли сработает. Вам нужно либоthis.id
, либо$element.attr('id')
. В методе 1 вам нужно использоватьvar $element = $(eventName.target);
, чтобы вызвать на немtoggleClass
. - person Heretic Monkey   schedule 05.10.2016$(this)
в переменную$element
. - person Bashiru Ismail Babatunde   schedule 05.10.2016id
. - person Heretic Monkey   schedule 05.10.2016