如何将事件处理程序从一个元素复制到另一个元素?例如:
$('#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/