我有DOM是这样的:
<a href='javascript:void(0)' id='link1'>Element with events bound initially</a> <a href='javascript:void(0)' id='link2'>Element to which events are bound in future</a>
和这个javascript:
$(function(){ $('#link1').bind('click',function(){alert('do something to make me happy');}) });
现在有一段时间,我想将绑定在link1上的所有事件复制到link2.我正在做如下所示,请建议一些更好的方式,如果可能或可用.
var _elmEvents = $(#link1).data('events'); if (_elmEvents) { $.each(_elmEvents,function (event,handlers) { $.each(handlers,function (j,handler) { $('#link2').bind(event,handler); }); }); }
解决方法
如果要将所有事件从一个对象复制到另一个对象而不进行克隆,则可以直接访问事件数据.
例如,如果你这样做:
$("#the_link").click(function(e){ // do some stuff return false; }.mouSEOver(function(e){ // do some other stuff });
您可以在元素的“事件”数据中访问这些事件关联人员
var events = $("#the_link").data('events');
它将是一个对象,其键代表事件类型,每个对象包含一个事件关联数组.无论如何,这里是一个简单的例子,不包括命名空间.
var events = $("#the_link").data('events'); var $other_link = $("#other_link"); if ( events ) { for ( var eventType in events ) { for ( var idx in events[eventType] ) { // this will essentially do $other_link.click( fn ) for each bound event $other_link[ eventType ]( events[eventType][idx].handler ); } } }