3

我经常看到这样的代码:

$("#thing").on("mouseenter",function(){ Do stuff });

就个人而言,我几乎总是写:

$("#thing").mouseenter(function(){ Do stuff });

同样,我经常写

$("#thing").click(function(){})

但我看到人们将其纠正为(是的,我知道在 v. 1.7+ 中onbind受欢迎,所以它本质上是相同的偏好问题):

$("#thing").bind("click",function(){}) 

我是否在做“错误”的事情,我没有看到的两个功能之间是否存在深刻差异?它似乎总是做我想做的事,所以它从来都不是一个实际问题,但我很想知道是否有我忽略的理论考虑。

4

4 回答 4

7

不是真的,它只是在源代码中看到的mouseenter函数调用on(或者如果没有参数调用)快一点:trigger

jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    };
});

如您所见,许多事件也可以这样说。

就个人而言,当我不需要特殊功能时,我更喜欢使用mouseenter(or等) 函数:在我看来,使用 jQuery 的一大优势是它使代码不那么冗长且更具可读性。我认为你不应该被纠正,问问纠正你的人他为什么这样做。clickon

于 2013-04-18T15:18:42.080 回答
2

通常,特定的事件喜欢.click$.post是快捷方式。它们的作用与使用.onand$.ajax函数相同,但后者通常具有更大的灵活性。EG.on可以绑定多个事件,而.click只订阅点击。同样适用于该$.ajax功能,还有更多选项,因为快捷方式设置了某些默认值。

于 2013-04-18T15:23:14.977 回答
1

两者之间没有实际区别,简写函数(.click(),.mouseover()等)调用.on()以实际绑定事件处理程序。直接使用的唯一“优势”.on()是您没有第二次函数调用的额外开销;我怀疑这可能是微不足道的,但这是一个非常过早的优化。

于 2013-04-18T15:18:52.963 回答
1

这不一定是错误的,但与正常方式相比,它有其优势。

通过将事件“绑定”到您的父容器$(parent).on(event, target, function() { //foobar });,您可以将新的目标元素添加到您的容器中,而不必重复 jquery 来绑定事件。

于 2013-04-18T15:19:18.607 回答