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 );
};
});