jQuery中的bind和live方法有什么区别?

Kev*_*own 65 jquery bind live

我很想知道bind和live函数之间的区别.

对我来说,他们似乎几乎完全相同.

我读了live/bind方法的好处,但它并没有告诉我差异......

谢谢!

nic*_*ckf 90

简而言之:.bind()仅适用于您当前在jQuery对象中选择的项目..live()将适用于所有当前匹配元素,以及您将来可能添加的任何元素.

它们之间的根本区别在于live()使用事件冒泡.也就是说,当您单击按钮时,该按钮可能存在于元素<p>中的a <div>,in中<body>; 所以实际上,你实际上是在同时点击所有这些元素.

live()通过将事件处理程序附加到文档而不是元素来工作.当您单击该按钮时,如前所示,文档将收到相同的单击事件.然后,它会查找事件所针对的元素行,并检查它们中的任何一个是否与您的查询匹配.

这样做的结果是双重的:首先,它意味着您不必继续将事件重新应用于新元素,因为它们将在事件发生时被隐式添加.但是,更重要的是(取决于您的情况),这意味着您的代码更轻松!如果<img>页面上有50个标签,则运行此代码:

$('img').click(function() { /* doSomething */ });
Run Code Online (Sandbox Code Playgroud)

...然后将该函数复制到每个元素中.但是,如果你有这个代码:

$('img').live('click', function() { /* doSomething */ });
Run Code Online (Sandbox Code Playgroud)

...然后该函数仅存储在一个位置(在文档上),并应用于事件时查询的任何匹配项.

但是,由于这种冒泡行为,并非所有事件都可以通过这种方式处理.正如Ichiban所指出的,这些支持的事件包括click,dblclick mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup.


ich*_*ban 77

.bind()将事件附加到在调用时存在或匹配选择器的元素.之后创建的任何元素或因为类已更改而匹配的元素都不会触发绑定事件.

.live()适用于现有和未来的匹配元素.在jQuery 1.4之前,这仅限于以下事件:click,dblclick mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup

  • 对于现在阅读此内容的任何人来说,`.live()`不再局限于上面列出的事件.`.live()`事件现在支持jQuery 1.4中的所有事件,包括自定义事件. (34认同)

小智 5

Bind会将事件绑定到指定的模式,以便在调用时将当前DOM中的所有匹配项绑定.Live会将事件绑定到当前DOM的指定模式以及DOM中的未来匹配,即使它发生更改.

例如,如果绑定$("div").bind("hover",...),它将适用于DOM中的所有"div".如果你然后操纵DOM并添加一个额外的"div",它就不会绑定那个悬停事件.使用live而不是bind会将事件分派给新的div.