Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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
Javascript 如何保留这个jQuery事件处理程序?_Javascript_Jquery_Event Handling - Fatal编程技术网

Javascript 如何保留这个jQuery事件处理程序?

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

我在dom元素上有一个点击平衡处理程序

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