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

时间:2012-05-08 22:58:03

标签: javascript jquery event-handling

我在dom元素上有一个click even处理程序。

jQcurrentOption.click(function () {
 //IMPLEMENTATION
});

当克隆这个元素时.cloneNode(true)它失去了它的事件处理程序:(。我知道我可以改变jQuery(注意我仍然使用1.4.4因此live而不是{{1} }(1.7 +))

bind

但是我很好奇是否有办法保留这些处理程序而不用jQcurrentOption.live("click",function(){ //IMPLEMENTATION }); (或live)来定义它们。有时我没有使用jQuery来应用bind的好处。

1 个答案:

答案 0 :(得分:2)

您是否尝试过jQuery的clone()

var $clone = jQcurrentOption.clone(true);

如果您将true作为参数传递,它会克隆事件处理程序。


除此之外,jQuery 1.4.4支持delegate(),相当于1.7 on()

$("select").delegate("option.current", "click", function () {
 //IMPLEMENTATION
});

这样,您的各个元素不需要复制事件处理程序。


只是为了说明一点:尽管delegate()从1.7开始被弃用,但它与更现代的on()实际上是相同的,唯一的区别是参数顺序。这是当前的实现(1.7.2):

delegate: function( selector, types, data, fn ) {
  return this.on( types, selector, data, fn );
}