Разница между назначением обработчиков событий с помощью Bind() и Each() в jQuery?
-
09-09-2019 - |
Вопрос
может ли кто-нибудь сказать мне, в чем разница между назначением обработчиков событий с помощью метода связывания():
$(function(){
$('someElement')
.bind('mouseover',function(e) {
$(this).css({
//change color
});
})
.bind('mouseout',function(e) {
$(this).css({
//return to previous state
});
})
.bind('click',function(e) {
$(this).css({
//do smth.
});
})
});
и используяeach() для той же задачи:
$('someElement').each(function(){
$(this).mouseover(function(){$(this).css({/*change color*/})
.mouseout(function(){$(this).css({/*return to previous state*/});
});
});
});
Спасибо.
Решение
Судя по приведенным вами примерам, я думаю, вы на самом деле спрашиваете, в чем разница, если таковая имеется, между использованием метода «привязки» и методами «события».
Например, в чем разница между:
$('.some_element').bind('click',function() { /* do stuff */ });
...и это?
$('.some_element').click(function() { /* do stuff */ });
Ответ в том, что это действительно не имеет значения.Это вопрос предпочтений.Методы событий синтаксически проще и требуют меньшего набора текста, но, насколько мне известно, особой разницы нет.Я предпочитаю использовать методы привязки, потому что вы можете использовать сокращенную привязку событий, если вам нужно прикрепить более одного события к одному и тому же действию.Это также упрощает понимание того, когда/нужно ли вам «отвязать» событие.
Глянь сюда: Разница между .bind и другими событиями
Но из того, что спрашивается на самом деле: «В чем разница между методом «каждый» и методом привязки»…ну это совсем другой зверь.
Никогда не следует использовать метод «each» для прикрепления событий, поскольку методы «bind» и «event» используют много более быстрый движок выбора CSS (в случае jQuery он использует движок Sizzle).
Вряд ли когда-либо (или никогда) не бывает случая, когда это:
$('.some_element').each(function() { $(this).click(function() { /* do something */ }); });
...лучше, чем это:
$('.some_element').bind('click',function() { /* do stuff */ });