使用jquery将事件从一个元素复制到其他元素

前端之家收集整理的这篇文章主要介绍了使用jquery将事件从一个元素复制到其他元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有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 );
        }
    }
}

猜你在找的jQuery相关文章