JQuery UI 可拖动 - 辅助函数 returns clone() 仅在参数传递给 clone() 时克隆一次

JQuery UI Draggable - Helper function which returns clone() only clones once if arguments passed to clone()

我正在克隆元素,因为它们是使用 JQuery 的 clone() 方法从 JQuery UI 可拖动列表中拖出的。查看 clone() documentation,我发现我可以通过将一个或两个布尔参数 (true,true) 传递给 clone() 方法来克隆已经绑定到这些元素的事件。

通过传递这些参数,事情变得很奇怪。如果我只使用 clone() 如下所示,一切都会按预期进行。

$(".draggable").draggable({
    connectToSortable: ".sortable",
    helper: function(e) {
        return $(this).clone();
    }
});

在上面的示例中,我获得了无限制的克隆,但我与克隆元素相关的事件也没有被克隆。那么,很自然地,我想为这个 clone() 方法添加一两个参数,以便我也可以克隆事件!

$(".draggable").draggable({
    connectToSortable: ".sortable",
    helper: function(e) {
        return $(this).clone(true);
    }
});

但这使得事情只能克隆一次。请参阅下面的 fiddle 示例!

这是一个 fiddle 和 clone(true),它只克隆一次: http://jsfiddle.net/og937wy7/9/

这里有一个 fiddle 和 clone(),它克隆了很多次。 http://jsfiddle.net/og937wy7/10/

如果我明白你的意思,你想多次克隆该元素。只需从 clone(true, true) 中删除参数即可解决问题:

$(".sortable").sortable({
});
$(".draggable").draggable({
    connectToSortable: ".sortable",
    helper: function(e) {
        return $(this).clone();
    }
});

我相信你在辅助选项中误用了 "clone" - 你不能将方法指定为字符串,字符串只是 jQueryUI 如何处理拖动元素的标识符。您可以提供一个方法(可调用)或一个字符串,如 in the docs.

如果将辅助选项设置为 "clone" 而不是 "clone(true, true)",将复制拖动的元素(当 "dragged" 时),正如我在 fiddle,事件也附加到它(因为您正确绑定事件)。

在您的 fiddle 中试试这个:

$(".sortable").sortable({
});
$(".draggable").draggable({
    connectToSortable: ".sortable",
    helper: "clone"
});