Javascript 如何保留这个jQuery事件处理程序?
我在dom元素上有一个点击平衡处理程序Javascript 如何保留这个jQuery事件处理程序?,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我在dom元素上有一个点击平衡处理程序 jQcurrentOption.click(function () { //IMPLEMENTATION }); 当克隆此元素时,.cloneNode(true)将丢失其事件处理程序:(.我知道我可以更改jQuery(注意,我仍然使用1.4.4,因此live而不是bind(1.7+)) 然而,我很好奇是否有一种方法可以保留这些处理程序,而不必使用live(或bind)定义它们。有时,使用jQuery应用live我没有任何好处。您试过jQuery的clo
jQcurrentOption.click(function () {
//IMPLEMENTATION
});
当克隆此元素时,.cloneNode(true)
将丢失其事件处理程序:(.我知道我可以更改jQuery(注意,我仍然使用1.4.4,因此live
而不是bind
(1.7+))
然而,我很好奇是否有一种方法可以保留这些处理程序,而不必使用
live
(或bind
)定义它们。有时,使用jQuery应用live
我没有任何好处。您试过jQuery的clone()
如果将true
作为参数传递,它将克隆事件处理程序
除此之外,jQuery 1.4.4还支持
delegate()
,这相当于1.7的on()
:
这样,您的单个元素就不需要复制事件处理程序
只是想说明一点:尽管从1.7开始就不推荐使用
delegate()
,但它实际上与更现代的on()
,唯一的区别是参数顺序。以下是当前的实现(1.7.2):
JQuery 1.7+的
.on()
可能对您有用,但当您使用1.4时,您需要另一个解决方案。@Fabricio在1.4中看到我关于需要“另一个解决方案”的回答。@Tomalak是的,我知道这一点。on
方法取代了1.7中的委托
,即“委托”一词在发表评论之前,我只是跳过了我的想法。我没有完全意识到克隆黑客,它可能会在未来派上用场。谢谢。这很有效。我想jQuery的克隆比javascript的克隆功能更强。我使用的最后一个解决方案是:var$y=$(x)。克隆(true);
@TravisJ是的。它还可以克隆您放入数据()中的任何内容
-无论如何,如果我是你,我会研究delegate()
。感觉更像你真正想要的。谢谢你的帮助:)我会研究委托方法(它支持未来的元素还是动态创建?从似乎指向“是”的文档中很难分辨。)@TravisJ是的,它支持。这与live()
或on()
是一样的。您可以将事件处理程序绑定到父容器,并将事件处理委托给它-因此函数名。因此,容器中所有动态创建的元素从一开始就表现正常。这就是重点。(另外,您不需要使用clone(true)
,只需使用clone()
就足够了。)克隆实际上是一种黑客行为,无法避免(旁注:没有true
,黑客行为就不起作用)。但感谢您提供有关委派的信息,这听起来很有希望-而且.clone(true)
真的通过了:)
jQcurrentOption.live("click",function(){
//IMPLEMENTATION
});
var $clone = jQcurrentOption.clone(true);
$("select").delegate("option.current", "click", function () {
//IMPLEMENTATION
});
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
}