【问题标题】:jquery drag and drop: Can I prevent an element to be dropped to another div after it has been dropped?jquery拖放:我可以防止一个元素在被删除后被拖放到另一个div吗?
【发布时间】:2012-12-03 23:07:41
【问题描述】:

我已经尝试了很长时间,但没有任何运气,我决定在这里问。

我正在使用 jquery ui 库创建拖放 div。

目前,我在页面上动态添加了许多带有“父”类的 div:

$( ".parent" ).droppable({
        accept: ".child",
        activeClass: "ui-state-hover",
        hoverClass: "ui-state-active",
    tolerance:'touch',
        drop: function( event, ui ) {
            $( this )
                .addClass( "ui-state-highlight" )
                .find( "p" )
                    .html( "Dropped!" ).appendTo(ui.Target);
        }
    });

然后,我使用“child”类动态创建一个 div,并且可以将子 div 拖放到任何父 div 中。请注意,对于父级 droppable,容差设置为“触摸”

$( ".child" ).draggable();

父 div 的大小比子 div 小。 每当我拖动一个子 div 并将其移动到两个父 div 上时(请注意,此时我还没有删除子 div),理想情况下,我希望子 div 仅被拖放到第一个父 div 中。

发生的情况是子 div 被附加到第一个父 div 中。然后它从第一个父 div 移动到第二个父 div。

有没有办法让子 div 保持可拖动但只能拖放到第一个父 div 中?

感谢阅读。

如果不清楚,请告诉我,我会改写它

将子级拖到父级 2 和 3 上显示相同的行为: http://jsfiddle.net/Dyawa/3/

【问题讨论】:

  • 如果有 jsFiddle 配合的话会容易理解很多。
  • 那么,您希望将子 div 拖放到您悬停在上方的第一个 div 上(即使您将其放在第二个 div 上)?
  • 是的,想象子 div 的大小是 x3,我可以将它悬停在父 div 1 和父 div 2 上(所以两个 div 都可以接受它)但是当我放下它时,我希望它只是放入第一个父 div(不是第二个)。现在,子 div 进入父 div 1,然后进入父 div 2。
  • jsfiddle.net/Dyawa - 请更新此内容以显示您的意思...
  • jsfiddle.net/Dyawa/3如果你把child拖到parent 2和3上,你会看到效果

标签: javascript jquery


【解决方案1】:

我注意到你注意到它设置为:

tolerance:'touch'

但这正是这意味着 - 'Draggable 与 droppable 重叠任意数量。' (来自http://api.jqueryui.com/droppable/#option-tolerance

检查一下:http://jsfiddle.net/Dyawa/2/ - 只需消除公差即可看到差异。

建议你使用:

tolerance: 'pointer'

【讨论】:

  • 问题是子框不能 100% 适合父框(有时是因为定位不便),这就是为什么我选择它为“触摸”以便它可以进入
  • 但是 intersect 只需要 50% - 而不是 100%,这还不够吗?你能提供一个说明你意图的小提琴吗?
  • jsfiddle.net/Dyawa/5 这解释了我想说的,尝试将孩子插入父母 1(我已经删除了触摸)
  • 我现在也在尝试指针。似乎指针可以解决问题。这不是最好的解决方案,因为它希望鼠标指针拖动该点直到它到达另一个控件...但我想我必须更改控件的尺寸...
【解决方案2】:

由于我没有看到整个代码,所以有点难以猜测,但请尝试以下操作:

$( ".parent" ).droppable({
        accept: ".child",
        activeClass: "ui-state-hover",
        hoverClass: "ui-state-active",
    tolerance:'touch',
        drop: function( event, ui ) {
            $( this )
                .addClass( "ui-state-highlight" )
                .find( "p" )
                    .html( "Dropped!" ).appendTo(ui.Target);
                     event.preventDefault(); // or `return false;` 
        }
    });

【讨论】:

  • 没有帮助,您可以看到父 2 和 3 在孩子悬停在他们之间时的行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多