【问题标题】:jQuery drag and drop is duplicating divsjQuery拖放正在复制div
【发布时间】:2012-04-15 06:26:09
【问题描述】:

好的,所以我从另一个问题中获取了这个代码 sn-p 并且我一生都无法记住哪个问题,否则我只会尝试复活那个问题。这就是我想要完成的:

我有各种 div 并且希望我能够拖动它们并让它们交换位置,所以如果我抓住红色方块并放在蓝色方块上,它们将交换位置(捕捉到它们的位置)。我只是想让真正的基本代码现在工作,一旦我得到它,我将在交换它们以更改内容和外观时实现不同的样式表。

当前代码的问题是当我拖放它时,它会回到原来的位置,并在我的其他 div 之后创建一个重复的 div。希望这是有道理的,这里是 jquery:

$(document).ready(function () {
    src = null;
    options = {
        revert:true,
        /*axis: 'x',*/
        opacity: 0.8,
        start: function() {
            src = $(this).parent();
        }
    }

    $(".item").draggable(options);
    $(".container").droppable({
        drop: function(event, ui) {
            src.append(
                $('.item', this).remove().clone()
                    .removeClass().addClass("item")
                    .css({"left": '', "opacity": '',"top":''})
                    .draggable(options)
                );

            $(this).append(
                ui.draggable.remove().clone()
                    .removeClass().addClass("item")
                    .css({"left": '', "opacity": '',"top":''})
                    .draggable(options)
                );
        }
    });

});

return this.pushStack( stack );

标记是这样的:

<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>

样式在这里应该很重要,但如果确实如此,我只需将它们设置为 100x100 像素,一红一蓝一绿。

【问题讨论】:

  • 你为什么不直接使用Sortable插件呢? Example
  • 噢,我喜欢这个例子。仍然无法让它在我的网站上运行,但我相信我的问题来自将脚本放在错误的位置。我是第一次做 MVC3 应用程序,所以我在布局上有点粗略。我会纠正这个问题并在今晚试一试。

标签: jquery html jquery-ui web-applications jquery-ui-draggable


【解决方案1】:

这是一个解决这个问题的方法,不使用交换插件,只使用 jQuery UI。 小提琴:http://jsfiddle.net/promatik/YtQRd/

jQuery 用户界面:

$(".item").on("mouseup", function(){
   $(this).css("top", "").css("left", "");
});

$(".item").draggable().droppable({
    drop: function( event, ui ) {
        draged = ui.draggable.css("top", "initial").css("left", "initial");
        dropped = $(this);
        var elems = draged.parent().children();
        if( elems.index(draged) > elems.index(dropped) ) {
            temp = draged;
            draged = dropped;
            dropped = temp;
        }
        var nElem = draged.next();
        dropped.after(draged);
        nElem.before(dropped);
    }
});

这将交换拖放的对象。

【讨论】:

  • 优秀、非常干净的解决方案。我不记得这是什么项目了,但 jsfiddle 看起来就像我的目标
猜你喜欢
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多