Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery'有什么优势吗;在(';mouseenter';,function()?_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery'有什么优势吗;在(';mouseenter';,function()?

Javascript 使用jQuery'有什么优势吗;在(';mouseenter';,function()?,javascript,jquery,Javascript,Jquery,我经常看到这样的代码: $("#thing").on("mouseenter",function(){ Do stuff }); 就我个人而言,我几乎总是这样写: $("#thing").mouseenter(function(){ Do stuff }); 同样,我经常写作 $("#thing").click(function(){}) 但我看到有人将其更正为(是的,我知道在v.1.7+中,on比bind更受欢迎,因此这基本上是相同的偏好问题): 我是否做了一些“错误”的事情,这两个功能

我经常看到这样的代码:

$("#thing").on("mouseenter",function(){ Do stuff });
就我个人而言,我几乎总是这样写:

$("#thing").mouseenter(function(){ Do stuff });
同样,我经常写作

$("#thing").click(function(){})
但我看到有人将其更正为(是的,我知道在v.1.7+中,
on
bind
更受欢迎,因此这基本上是相同的偏好问题):


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

不是真的,它只是稍微快一点,因为
鼠标指针
函数调用
(或者
触发器
,如果没有参数调用)从源代码中可以看出:

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
(或
单击
,等等)功能:我认为使用jQuery的一大优势是它可以减少代码的冗长程度,提高代码的可读性。我认为你不应该被纠正,问问那些纠正你的人他为什么这么做。

这两者之间没有实际区别,简写函数(
.click()
.mouseover()
,等等)调用
.on()
来实际绑定事件处理程序。直接使用
.on()
的唯一“好处”是,不需要第二次函数调用的额外开销;我怀疑这可能是一个非常不成熟的优化,尽管它可能是边缘化的。

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


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

通常,特定事件如
。单击
$。post
是快捷方式。它们的作用与在
$上使用。函数相同。ajax函数通常具有更大的灵活性。例如
。on
可以绑定到多个事件,而
。单击
只能订阅单击。同样适用于
$。ajax
函数,由于快捷方式设置了某些默认值,因此有更多选项。

技术上正确,但我们这里不讨论直接事件与委托事件。我们正在比较使用
.click()
(例如)的直接事件与使用
.on('click')
的直接事件。我认为OP自愿是明确的,以避免添加目标的特殊情况。这个答案似乎离题了。@dystroy公平地说,我没有预见到添加元素,但源代码表明,
.click()
调用
.on(“click”…)
那么即使在这种情况下,它们的行为也不应该相同吗?它只会将click事件绑定到当前dom。通过使用已定义的目标将事件绑定到父元素,它将允许在新的子元素上运行事件。@JasonNichols我没有收到您的评论。你看过我的答案了吗?如果是这样的话,你能更精确一点吗?两者之间没有功能上的差异,性能上的差异也可以忽略不计。一个重要的区别(在我看来)是保持代码的一致性。如果现有代码在整个过程中使用
.on
而不是速记,请继续使用
.on
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 );
    };
});