jquery - 将一个元素的事件处理程序复制到另一个元素上?

标签 jquery events

如何将事件处理程序从一个元素复制到另一个元素?例如:

$('#firstEl')
    .click(function() {
        alert("Handled!");
    })
;

// here's where the magic happens 
$('#secondEl').click = $('#firstEl').click; // ????

请注意,第二个元素的处理时间与第一个元素获取其处理程序的时间不同,这意味着:

$('#firstEl, #secondEl').click(function() { ... });

...行不通。

最佳答案

这个问题已经得到解答,但供将来引用:您可以通过迭代原始元素的事件并将其处理程序绑定(bind)到目标来复制它们。

>请参阅下面的编辑!

// iterate event types of original
$.each($('#original').data('events'), function() {
  // iterate registered handler of original
  $.each(this, function() {
    $('#target').bind(this.type, this.handler);
  });
});

当您无法控制原始元素(例如使用插件时)并且只想克隆某个元素的行为时,这非常方便。

编辑:在更高版本的 jQuery 中,对元素事件处理程序的访问已更改。这应该适用于较新的版本:

$.each($._data($('#original').get(0), 'events'), function() {
  // iterate registered handler of original
  $.each(this, function() {
    $('#target').bind(this.type, this.handler);
  });
});

干杯

关于jquery - 将一个元素的事件处理程序复制到另一个元素上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441821/

相关文章:

javascript - 在 JSViews 中访问/设置名称中带有点的观察者属性

javascript - FullCalendar 自定义按钮图标未显示

javascript - 一个简单的事件系统 |如何?

javascript - 如何在更改事件中获取剑道组合框的值

javascript - 移动 Safari 上 JavaScript websocket 中的明显阻塞行为

javascript - html滚动到闪烁页面

javascript - 如何在 slice() 之后使用 jQuery live()?

javascript - jquery 创建双重验证错误

wpf - Reactive Extensions (Rx) - 仅在按住某个键时订阅鼠标位置数据

javafx tableview oneditcommit 不会被自定义 cellfactory 调用?