JQuery UI Draggable - 如果参数传递给 clone(),则返回 clone() 的帮助函数仅克隆一次

Posted

技术标签:

【中文标题】JQuery UI Draggable - 如果参数传递给 clone(),则返回 clone() 的帮助函数仅克隆一次【英文标题】:JQuery UI Draggable - Helper function which returns clone() only clones once if arguments passed to clone() 【发布时间】:2016-01-11 13:25:12 【问题描述】:

我正在克隆元素,因为它们是使用 JQuery 的 clone() 方法从 JQuery UI Draggable 列表中拖出的。查看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);
    
);

但这使得事物只克隆一次。有关示例,请参见下面的小提琴!

这是一个 clone(true) 的小提琴,它只克隆一次: http://jsfiddle.net/og937wy7/9/

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

【问题讨论】:

【参考方案1】:

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

如果您将帮助器选项设置为"clone" 而不是"clone(true, true)",则将复制拖动的元素(当“拖动”时),正如我在小提琴中看到的那样,事件也附加到它(因为你正确绑定事件)。

在你的小提琴中试试这个:

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

【讨论】:

感谢您的帖子。我实际上已经意识到将函数作为字符串传递会搞砸……但是我遇到了另一个特殊的问题。出于某种原因,当我使用不带参数的 clone() 时,一切正常。当我尝试为复制事件处理程序添加参数时,它只会克隆一次。知道为什么吗? 请用细节和例子更新你的问题,这样我就可以看一下并尝试弄清楚。 完成。更新的问题和两个小提琴。这两个小提琴的唯一区别是问题中提到的论点true 为什么又使用clone() 不适合你?你的第二把小提琴奏效了。请更“详细”地解释你在问什么.. 你是对的。我刚刚删除了 True 参数,我的所有事件仍然正常工作,因为我将它们绑定到工作区而不是元素本身。当我第一次实现这个时,我必须以不同的方式绑定事件。谢谢你帮我找出来!!【参考方案2】:

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

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

【讨论】:

clone 方法的参数对于我的用例来说是必需的,因为我也需要它来复制与它们相关的事件。

以上是关于JQuery UI Draggable - 如果参数传递给 clone(),则返回 clone() 的帮助函数仅克隆一次的主要内容,如果未能解决你的问题,请参考以下文章

JQuery UI Draggable - 如果参数传递给 clone(),则返回 clone() 的帮助函数仅克隆一次

Jquery UI Draggable iframe滚动问题不起作用

jquery ui draggable中如何避免div叠加?

使用网格恢复“无效”不会使用 jQuery UI Draggable 返回到起始位置

jQuery UI-Draggable 参数集合

jQuery UI Draggable and Resizable 1点击后停止工作[重复]