Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
为什么使用jQuery';s";关于;“比”好;“生活”;_Jquery - Fatal编程技术网

为什么使用jQuery';s";关于;“比”好;“生活”;

为什么使用jQuery';s";关于;“比”好;“生活”;,jquery,Jquery,我看到越来越多的开发人员正在使用$('#element id').on()方法,而不是$('#element id').live()方法 为什么??live方法没有的是什么?与绑定的事件处理程序。live与文档绑定。与.on绑定的事件处理程序绑定到您指定的元素。这意味着您可以减少事件冒泡到将接收它的元素所花费的时间,也意味着您可以停止传播(使用.live不可能,因为它已经到达文档) .on方法还允许对所有事件处理程序使用单个方法-。live将始终委托事件处理程序,而.on仅在将选择器作为第二个参

我看到越来越多的开发人员正在使用
$('#element id').on()
方法,而不是
$('#element id').live()
方法


为什么??
live
方法没有的是什么?

绑定的事件处理程序。live
文档绑定。与
.on
绑定的事件处理程序绑定到您指定的元素。这意味着您可以减少事件冒泡到将接收它的元素所花费的时间,也意味着您可以停止传播(使用
.live
不可能,因为它已经到达文档)

.on
方法还允许对所有事件处理程序使用单个方法-
。live
将始终委托事件处理程序,而
.on
仅在将选择器作为第二个参数传递时才会委托。如果没有,它将绑定到匹配的元素集

以下列表中列出了更多缺点:

  • jQuery尝试检索选择器指定的元素 调用
    .live()
    方法之前,这可能会在 大型文件

  • 不支持链接方法。例如
    $(“a”).find(“.offsite,.external”).live(…)无效,不可用
    没有按预期工作

  • 由于所有
    .live()
    事件都附加在 文档元素,事件采用最长和最慢的可能路径 在他们被处理之前

  • 在移动iOS(iPhone、iPad和iPod Touch)上,对于大多数元素,单击事件不会出现在文档正文中,并且不能与
    .live()

  • 在事件处理程序中调用
    event.stopPropagation()
    ,在停止文档中较低的事件处理程序时无效;事件已传播到文档

  • .live()
    方法以令人惊讶的方式与其他事件方法交互,例如
    $(文档)。取消绑定(“单击”)
    将删除通过调用
    .live()
    附加的所有单击处理程序

出于所有这些原因,您应该始终使用
.on()
而不是
.live()
。如果您仍然使用旧版本的jQuery(低于1.7),那么可以使用
.delegate()


旁注-所有事件绑定方法都在引擎盖下调用
.on()
,因此使用
.on()
满足所有事件处理需求是有意义的。不要费心于像
这样的快捷方式。单击()
;您可以从中看到,他们所做的只是在
上调用

return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
完整答案:

简短阅读:

不再推荐使用.live()方法,因为较新版本的jQuery提供了更好的方法,但没有缺点。特别是,使用.live()时会出现以下问题:

  • jQuery尝试在调用.live()方法之前检索选择器指定的元素,这在大型文档中可能会很耗时
  • 不支持链接方法。例如,$(“a”).find(“.offsite,.external”).live(…);无效,无法按预期工作
  • 由于所有.live()事件都附加在document元素上,因此在处理事件之前,事件的路径可能最长、最慢
  • 在事件处理程序中调用event.stopPropagation()无法停止文档中较低位置附加的事件处理程序;事件已传播到文档
  • .live()方法与其他事件方法的交互方式可能会令人惊讶,例如$(document)。取消绑定(“单击”)将删除任何调用.live()所附加的所有单击处理程序
另外,请记住,.on()函数只包含在jQuery 1.7中,它在早期版本中不起作用。

首先,从jQuery 1.7开始,不推荐使用
live()
方法,您应该开始逐步停止在代码中使用它。使用此方法无法正确支持链接

关于jQuery.bind(),.live(),.delegate(),.on()之间的比较,有一篇非常好的文章