在jQuery中使用bind()和each()分配事件处理程序之间的区别?

时间:2009-04-16 15:01:48

标签: javascript jquery function bind each

有人可以告诉我使用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 个答案:

答案 0 :(得分:6)

从你给出的例子中,我想你实际上是在询问使用'bind'方法和'event'方法之间有什么区别。

例如,有什么区别:

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

......还有这个?

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

答案是,这无关紧要。这是一个偏好问题。事件方法在语法上更简单,涉及更少的输入,但据我所知,确实没有任何区别。我更喜欢使用绑定方法,因为如果需要将多个事件附加到同一个操作,则可以使用速记事件绑定。它还可以让您更容易理解何时/是否需要“解除绑定”事件。

见这里:Difference between .bind and other events

但是,从实际问题的问题来看,“'每种'方法和'绑定'方法之间有什么区别”......好吧,这是一个完全不同的野兽。

你永远不应该使用'each'方法来附加事件,因为'bind'和'event'方法使用很多更快的CSS选择器引擎(在jQuery的情况下,它使用Sizzle引擎) )。

几乎没有(或从未)这样的情况:

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

......比这更好:

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