如何将事件处理程序从一个元素复制到另一个元素?例如:
$('#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'), function() { // iterate registered handler of original $.each(this, function() { $('#target').bind(this.type, this.handler); }); });
干杯