如何将事件从一个组复制到另一个组?

时间:2015-01-22 10:13:08

标签: jquery jquery-data jquery-events

如何将事件从一个组复制到另一个组?

Html(请注意,.view没有任何意外事件),

<div class="original">
    <a href="#" class="edit">edit</a>
    <a href="#" class="delete">delete</a>
    <a href="#" class="view">view</a>
</div>

<div class="copy">
    <a href="#" class="edit">edit</a>
    <a href="#" class="delete">delete</a>
    <a href="#" class="view">view</a>
</div>

jQuery的:

var parent = $('.original');

$(".edit", parent).click(function(){
    return false;
});

$(".delete", parent).click(function(){
    return false;
});


$.each($._data($('.edit:first').get(0), 'events'), function() {
    // iterate registered handler of original
    $.each(this, function() {
      $('.edit:last').bind(this.type, this.handler);
    });
});

有了这个,我只设法将.edit的事件复制到另一个,但我有很多更多事件要复制到另一个组。

有什么想法吗?

修改

$("a").each( function(i, e) { 
    var $each = this;
    //console.log($._data($(this).get(0), 'events'));
    if($._data($(this).get(0), 'events') !== undefined){
        $.each($._data($($each).get(0), 'events'), function() {
            $.each(this, function() {
                $("." + $each.className, copy).unbind(this.type, this.handler).bind(this.type, this.handler);
            });
       });
    }
}); 

1 个答案:

答案 0 :(得分:0)

根据jQuery's .clone() documentation,只有一个参数。因此,在您的情况下,要克隆一个群组并复制所有孩子的所有事件,您将执行以下操作:

$(".original a.edit").on("click", function () {
    alert("edit clicked!");
});
$(".original a.delete").on("click", function () {
    alert("delete clicked!");
});
$(".original a.view").on("click", function () {
    alert("view clicked!");
});

var $clone = $(".whatever-your-container-is-called").clone(true);
$("#container").append($clone);

执行工作的位是.clone(true),其中参数名称为 withDataAndEvents