【问题标题】:Drag item onto specific position within sortable将项目拖到可排序的特定位置
【发布时间】:2012-10-11 11:12:02
【问题描述】:

我有两个容器,里面有多个物品。第一个包含一些图标,代表可以插入到列表中的元素。第二个容器是实际的列表,元素完全不同(从 HTML 结构的角度来看)。这有点像“将一个项目拖到第二个列表中以创建此内容类型”。

它可以像这样正常工作:

this.templates.draggable({ revert: true });
this.content.droppable({
    drop: function(event, ui) {
        // create element for this list
        // prepend item to the list
    }
});

问题是,我只能添加或附加元素。因此,用户丢弃它的位置无关紧要。但实际上新元素应该在它被删除的元素之间创建。

所以我尝试了这个(没有上面的drop-callback):

this.templates.draggable({
    revert: true,
    helper: 'clone',
    connectToSortable: '#idofcontainer'
});

这几乎可以正常工作,但它会克隆图标。所以我不知道如何停止这种行为并改为创建新元素。

所以,这里有一个屏幕截图来说明我的意思:当图标被放下时,它应该恢复到顶部列表,并且应该在当前位置创建一个新的“灰色容器”。

【问题讨论】:

  • 添加到列表后是否要将图标恢复到原来的位置?
  • 是的,它应该恢复到原来的位置,因为您可以插入任意数量的它。我也不能只使用不同的样式。最终的 HTML 模板可能会在列表中包含用于拖动的 <a>-tags 和 <div>-tags。

标签: jquery jquery-ui drag-and-drop draggable jquery-ui-sortable


【解决方案1】:

我相信这是您的解决方案:

this.templates.draggable({
    revert: true,
    helper: 'clone',
    connectToSortable: '#idofcontainer'
    stop: function(event,ui) { $('#idofcontainer>a').replaceWith('<div>' + $(this).text() + '</div>'); }
});
this.content.sortable({ cancel: '#idofcontainer>div' /* to stop moving divs under container */ });

JsFiddle:http://jsfiddle.net/BerkerYuceer/KZeBq/

【讨论】:

  • 感谢您的努力。这正是我在我的问题中尝试过的。 :) 所以这个有效,但它从上面克隆了元素。所以你得到的是a- 和div-tags 的混合。基本上它应该只指定我手动创建的元素应该插入的位置。希望很清楚我想要达到的目标。
  • 是的,效果很好。简单地替换克隆元素的好主意。非常感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多