В чем разница между назначением обработчиков событий с помощью bind () и each () в jQuery?

может кто-нибудь сказать мне, в чем разница между назначением обработчиков событий с помощью 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*/ });
            });
    });
});

person chosta    schedule 16.04.2009    source источник
comment
Ваш второй пример не демонстрирует метод «каждый». Просто чтобы вы знали ...   -  person KyleFarris    schedule 16.04.2009


Ответы (1)


Судя по приведенным вами примерам, я думаю, вы действительно спрашиваете, в чем разница, если таковая имеется, между использованием метода «привязки» и затем методов «события».

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

$('.some_element').bind('click',function() { /* do stuff */ });

... и это?

$('.some_element').click(function() { /* do stuff */ });

Ответ в том, что это действительно не имеет значения. Это вопрос предпочтений. Методы событий синтаксически проще и требуют меньше ввода, но, насколько я знаю, на самом деле никакой разницы нет. Я предпочитаю использовать методы привязки, потому что вы можете использовать сокращенную привязку событий, если вам нужно привязать более одного события к одному действию. Это также упрощает понимание того, когда / если вам нужно «отвязать» событие.

См. Здесь: Разница между .bind и другими событиями

Но, судя по тому, что задает вопрос: «В чем разница между методом 'each' и методом 'bind'? ... ну, это совершенно другой зверь.

Вам никогда не следует использовать метод each для присоединения событий, потому что методы bind и event используют намного более быстрый механизм выбора CSS (в случае jQuery он использует механизм Sizzle).

Вряд ли (или никогда) не будет случая, чтобы это:

$('.some_element').each(function() { $(this).click(function() { /* do something */ }); });

... лучше, чем это:

$('.some_element').bind('click',function() { /* do stuff */ });
person KyleFarris    schedule 16.04.2009