如何将事件处理程序从一个元素复制到另一个元素?例如:
$('#firstEl') .click(function() { alert("Handled!"); }) ; // here's where the magic happens $('#secondEl').click = $('#firstEl').click; // ????
请注意,第二个元素正在不同的时间处理,当第一个元素获取其处理程序时,这意味着:
$('#firstEl,#secondEl').click(function() { ... });
…不行
解决方法
这个问题已经被回答了,但为了将来的参考:你可以通过迭代原始元素的事件并将其处理程序绑定到目标来复制它们.
>看下面编辑!
// 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'),this.handler); }); });
干杯