1

我的网页实现有问题JQuery。我知道很难理解我想要做什么,但我会尽量让它最清楚(尽管我的英语不是很好)。

我有一个网页,其中有一个可以在“包含包装器”中拖动的 div,并且我已经实现了,当你拖动它时,你会得到该div 的克隆(副本),然后你可以拖动这个克隆的 div在屏幕周围(在“containment-wrapper”内)。每次拖动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 的位置(我保存了div 的 id 和位置 - 顶部走了)。

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

我用这段代码得到了它(我有以下值:$id -div 的 id,$left$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 内部,它开始被拖动div(我从中创建克隆的 div) 并创建另一个克隆的 div。因此,无法拖动我的代码创建的克隆 div。

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

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

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

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

非常感谢您的宝贵时间,

阿莱克斯

4

1 回答 1

0

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

    window.onload = initialize;

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

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

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

非常感谢您的意见。

于 2011-05-23T18:31:28.437 回答