.bind()
仅适用于您当前在 jQuery 对象中选择的项目。 .live()
将适用于所有当前匹配的元素,以及您将来可能添加的任何元素。live()
利用了 事件冒泡。也就是说,当您单击按钮时,该按钮可能存在于 <p>
、<div>
或 <body>
元素中;因此,实际上,您同时单击了所有这些元素。
live()
的工作原理是将事件处理程序附加到 document 而不是 element。当您像前面所示那样单击该按钮时,文档会接收相同的单击事件。然后,它会向上查找事件目标元素的行,并检查其中是否有任何元素与您的查询匹配。<img>
标签,并且您运行此代码:$('img').click(function() { /* doSomething */ });
...然后该函数会被复制到每个元素中。但是,如果您有以下代码:
$('img').live('click', function() { /* doSomething */ });
apply()
和/或call()
每次触发事件处理程序时适当地设置this
的值。无论如何,这就是我会做的方式。我想检查源代码是唯一确定的方法。 - aroth.bind()会将事件附加到存在或在调用时匹配选择器的元素上。之后创建的任何元素或因更改类而匹配的元素都不会触发绑定的事件。
.live()适用于现有和未来匹配的元素。在jQuery 1.4之前,仅限于以下事件:click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、keydown、keypress、keyup。
.live()
不再局限于上述列出的事件。jQuery 1.4版本中,.live()
事件现在支持所有事件,包括自定义事件。 - Josh SmithBind函数将会绑定事件到指定的模式,对于当前DOM中所有匹配的元素在调用时进行绑定。Live函数将会绑定事件到指定的模式,不仅对于当前DOM中的元素生效,也会对于未来添加到DOM中的元素生效。
例如,如果你使用$("div").bind("hover", ...)进行绑定,它将会应用到当前DOM中所有的"div"元素。如果此后你操作DOM并添加了一个额外的"div"元素,它将不会拥有该hover事件的绑定。如果使用live代替bind,则新添加的div元素同样能够接收到该事件。
这篇文章很不错:http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/
自jQuery 1.7以来,使用.on()函数已被废弃 - http://api.jquery.com/on/
<img>
元素。
$('img').bind('click', function(){...});
get()
、html()
或其他任何方法)$('img')...
时,新的图像不存在,所以它没有将事件处理程序绑定到它们身上。<img>
元素。
$('img').live('click', function(){...});
get()
、html()
或其他任何方法)live()
事件匹配,如果是,则触发它们,无论元素是在live()
调用之前还是之后创建的。除了他们说的之外,我认为最好尽可能地坚持使用 bind
,只有在必要时才使用 live
。
document
上触发)检查它们。这里有一些开销,但非常小。真正的危险是,某些使用 live
的情况可能导致垃圾回收失败。 - eyelidlessness在我自己愚蠢的调试过程中,我想补充一下。我将.live()应用于页面上的一个按钮类,假设它只会呈现出我尝试通过查询字符串传递的正确ID,并使用ajax调用执行我想要的操作。我的应用程序动态添加了与库存项目相关联的按钮。例如,从顶部向下钻取类别到“COKE”按钮以将可乐添加到您的订单中。再次从顶部向下钻取,然后添加“BUDLITE”-每次我都希望通过AJAX调用将这些项目输入表格。
然而,由于我将.live()绑定到整个按钮类,它会记住我已经进行的每个ajax调用,并为每个后续按钮重新触发它!这有点棘手,因为我并不完全清楚bind和live之间的区别(上面的答案非常明确),所以我想把这个放在这里,以防有人正在搜索这些内容。
有一种方法可以获得实时效果,但有点不好。
$(this).unbind('mouseout').bind('mouseout',function(){ });
这将清除之前的内容并重置新内容。在我使用过程中似乎一直很好用。
bind
、live
和delegate
之间的区别。链接:http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/ - Jonlive()
方法已被弃用,推荐使用on()
方法。 - J.G.Sebring