将事件从一个选择器合并到另一个

时间:2014-02-11 00:30:12

标签: javascript jquery

我想知道是否可以存储来自jQuery选择器的事件并将其应用到另一个选择器?

与$('selector')类似的东西.clone(true)但实际上只克隆事件而不是元素。

$('.class1').on('click.click1', function(e) {
alert('click 1')
});

$('.class2').on('click.click2', function(e) {
    alert('click 2')
});

// pseudo
$('.class2') cloneEvents from $('.class1');

1 个答案:

答案 0 :(得分:1)

用于此目的的快速且脏的jQuery插件

它使用内部方法$source通过jQuery读取绑定到_data的事件处理程序,迭代它们并将它们绑定到$target。源自此snippet

;(function($, doc, win) {
    "use strict";

    $.fn.cloneEventsFrom = function($source) {
        var $this = $(this),
        source = $source.get(0);

        $.each($._data(source, 'events'), function() {
            $.each(this, function() {
               $this.bind(this.type, this.handler);
            });
        });
    };

})(jQuery, document, window);

用法:点击此处:http://jsfiddle.net/marionebl/4Jv37/1/

var $target = $('.target'),
    $source = $('.source')

$target.cloneEventsFrom($source);