1

我正在开发一个应用程序,该应用程序需要我克隆一个可放置的 JQuery 对象。

删除了不必要的代码的快速演示是:

var $droppable = $("#droppable");
$droppable.droppable({
    accept : "#draggable",
    hoverClass : "thickBorder",
    drop : function () {
        alert("thanks");
    }
});

var $cloned = $droppable.clone(true);

http://jsfiddle.net/tGg9Y/


我使用了 .clone(true),其他事件处理程序(如 click)继续工作,但 droppable 丢失了。

我什至尝试使用以下方法直接重置 droppable:

$cloned.droppable($droppable.droppable('option'));

有谁知道如何让它工作?

4

2 回答 2

0

如果您不执行 的深层复制element,并且在其上重新应用可放置插件,它应该可以工作。

var $cloned = $droppable.clone(false);

我认为复制一个应用了插件的元素不是很安全,除非你 100% 确定插件的设计和编码方式可以支持使用同一个插件实例的多个 DOM 元素。

我创建了一个jsFiddle来证明它可能是一个问题的一个原因,但可能还有很多其他原因。

HTML

<div id="initial">Initial</div>

JS

function SomePlugin(el) {
    var $el = this.$el = $(el);

    $el.mouseenter(function () {
            //works for this handler because we did not use a closure variable
            $(this).css({ backgroundColor: 'red'});
        })
        .mouseleave(function () {
            //won't work for this one because because we are referencing $el
            //wich will always point to the other element
            $el.css({ backgroundColor: 'white'});
        });
}

//instanciate plugin
var $initial = $('#initial'), $clone;
new SomePlugin($initial);

$clone = $initial.clone(true).html('clone').attr('id', 'clone').appendTo(document.body);
于 2013-04-19T03:28:56.930 回答
0

只需将您的代码更改为此,FIDDLE

     var $cloned = $droppable.clone(false);
于 2013-04-19T12:37:53.990 回答