Разница между назначением обработчиков событий с помощью bind () и each () в jQuery? - PullRequest
2 голосов
/ 16 апреля 2009

Может кто-нибудь сказать мне, в чем разница между назначением обработчиков событий с помощью bind ():

$(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*/});   
                    });     
                }); 
    });

спасибо.

1 Ответ

6 голосов
/ 16 апреля 2009

Из приведенных вами примеров я думаю, что вы на самом деле спрашиваете, какая разница, если есть, между использованием метода 'bind' и методов 'event'.

Например, в чем разница между:

$('.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 */ });
...