jQuery可拖动克隆的div

Posted

技术标签:

【中文标题】jQuery可拖动克隆的div【英文标题】:Jquery draggable cloned divs 【发布时间】:2011-08-28 11:54:24 【问题描述】:

我在使用 JQuery 实现网页时遇到问题。我知道很难理解我要做什么,但我会尽量把它说得最清楚(尽管我的英语不是很好)。

我有一个网页,其中有一个 div 可以在“containment-wrapper”内拖动,我已经实现了 当你拖动它时,你会得到一个克隆 (副本)该 main div,然后您可以将这个克隆的 div 拖动到屏幕周围(在“containment-wrapper”内)。每次拖动 main div 时,都会创建另一个克隆的 div。效果很好。

代码:

$(".tool").draggable(
        containment: "#containment-wrapper",
        helper: 'clone',
        stop: function(event, ui) 
                 if($num==null) $num=0; //treat a number for the id of the next cloned div
                 else $num++;
                 $(ui.helper).clone(true).attr("id",$(this).attr("id")+$num).removeClass('tool ui-draggable ui-draggable-dragging ui-widget-content').addClass('element ui-widget-content').appendTo('#containment-wrapper');
            
    );

问题是我必须实现,当您加载该网页时,用户已将他的前 div 的情况保存在服务器中:所有克隆的位置div 的(我保存了 main div 的 id 和位置 - 顶部和左侧)。

所以我正在尝试实现一个代码,该代码仅在页面加载时执行,创建并将用户保存的克隆 div 放置在屏幕上 (在“containment-wrapper”内)。

我用这段代码得到了它(我有以下值:$id - main div、$left 的 id >$top - 我必须创建的 div 的位置):

        var $obj = $("#"+$id); //get the main div
        if($num==null) $num=0; //treat a number for the id of the next cloned div
        else $num++;

        $obj.clone(true).attr("id",$id+"_"+$num).removeClass('ui-draggable ui-draggable-dragging ui-widget-content').addClass('ui-widget-content').appendTo('#containment-wrapper').css(  "position": "absolute", "left":$left + "px", "top":$top + "px"  );

它会在我想要的地方创建克隆的 div,但我的大问题是 当我尝试用鼠标拖动克隆的 div 时,在拖动该 div 的内部,它开始被拖动 main div (我从中创建克隆的 div)并创建另一个克隆的 div。所以无法拖动我的代码创建的那个克隆的 div。

我希望能够了解我的所有情况和问题...知道如何解决它吗?

我也尝试过做这样的事情(用它,我想在可拖动事件函数中处理位置):

        var $obj = $("#"+$id);
        $obj.trigger("mousedown.draggable", [ev]);
        ev.stopPropagation();

但是当我用firebug(firefox插件)调试它时,我看到事件draggable永远不会执行。

非常感谢您的宝贵时间,

阿莱克斯

【问题讨论】:

欢迎来到 ***!你的英语很好!您是否可以在 jsfiddle.net 上提供一个关于您的问题的简明示例? 为什么不让“主 div”被拖动,而将克隆留在后面。然后交换 id 并将事件侦听器添加到克隆。 @Adrew:我正在研究它是如何工作的“jsfiddle.net”,因为我不知道它并且我从未使用过它。当我得到它时,我会告诉你;)谢谢! // @Yman:谢谢你的想法。我理解,但我认为如果我必须从主 div 创建多个克隆 div,那么我将遇到同样的问题......无论如何我可以试试,谢谢! 【参考方案1】:

我解决了! 代码没问题,唯一的问题是调用了负责创建克隆 div 的 initialize() 函数:我是使用此代码行(在 javascript 代码内)调用此函数:

    window.onload = initialize;

如果我删除此行并从$(document).ready 函数调用initialize() 函数,那么一切正常! :)

$(document).ready(function() 
        [...]
        initialize();
        );

我意识到这一点,试图简化 jsfiddle.net 中的代码。所以,愚蠢的错误,但我很高兴终于解决了它:)

非常感谢你们的cmets。

【讨论】:

以上是关于jQuery可拖动克隆的div的主要内容,如果未能解决你的问题,请参考以下文章

jQuery可拖动克隆的div

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

jquery UI 可拖动助手:克隆从原始中删除可拖动?

jQuery拖放:克隆的可拖动移动原始

Jquery 使克隆图像可拖动和调整大小

jQuery-UI 可拖动克隆 - 启动处理程序是不是收到对被克隆元素的任何引用?