【问题标题】:How do I stop droppable event propagation with different parent?如何停止与不同父级的可丢弃事件传播?
【发布时间】:2014-02-21 16:43:38
【问题描述】:

开始当元素有不同的父元素时贪婪不会运行,并且这个元素是叠加的。像这样:

<div id="one">
  <div class="icone draggable"></div>
  <div id="background" class="droppable">
    <div id="grey" class="droppable"></div>
    <div id="red" class="droppable"></div>
  </div>
</div>
<div id="two">
  <div id="yellow" class="droppable"></div>
</div>

如果我将 .icone#red 放到 #yellow#yellow #background),我有两个这样的事件(drop 事件):

start
drop in background (<= Bad event)
drop in yellow

但是,如果我将 .icone#yellow 放到 #red,它会起作用,我只有 一个事件:

start
drop in red

#yellow 没有停止事件传播,#red 有正确的反应。

如果我将 .icone 拖到 #yellow 中,我会得到三个事件而不是一个(在我的原始代码中,我可以设置 .icone 的位置em> 当我拖动它时):

start
drop in background (<= Bad event)
drop in yellow (<= Bad event)
drag in yellow

请参阅 my example code,如何停止向 #yellow 传播事件?

#red#yellow可以这样叠加second example code

我尝试了在 stackoverflow 上提出的不同解决方案,其中包含禁用其他可丢弃事件的溢出/输出事件。但是如果我使用这个解决方案,我不能将 .icone 退出到 #yellow

谢谢。

在此处查看解决方案: http://jsbin.com/mubenaze/21/edit

【问题讨论】:

  • 所以如果我将绿色方块从黄色拖到蓝色背景,它不应该接受吗?
  • 它应该接受它,但是如果我将绿色方块从red 放到yellow,我必须只有一个事件(观察console.log)。
  • 因此不应发生额外的“背景下降”
  • 但关键是红色有一个“正确的反应”,因为在 html 代码中黄色不在背景中。另一方面,当您将某些东西放入红色内时,您会同时释放红色和背景内的绿色方块。
  • 别在意我的最后评论;)我明白了

标签: javascript jquery jquery-ui jquery-ui-droppable


【解决方案1】:

我猜你不得不单独处理#yellow 之类的例外情况。 这是一个可能的解决方案,但可能需要一些 css 修复(因为禁用的 droppables 获得不透明度:0.35; 但我想不出比在需要时禁用背景更好的解决方法了。

$( "#yellow" ).on( "dropout", function( event, ui ) {
$("#background").droppable('option', 'disabled', false);
} );

$( "#yellow" ).on( "dropover", function( event, ui ) {
$("#background").droppable('option', 'disabled', true);
} );

需要为每个不在后台的 div 添加这些选项。

重新编辑: 添加这个以在删除后重新启用#background:

$( "#yellow" ).on( "drop", function( event, ui ) {
$("#background").droppable('option', 'disabled', false);
} );

http://jsbin.com/mubenaze/18/

【讨论】:

  • 我想保持我的 HTML 代码这样,我不能更改 HTML 代码。
  • 哦,所以这不是无法访问 html 文件的问题。你根本无法改变它。
  • 我谈的不是 HTML 代码,而是 HTML 结构(我的原始代码比这个例子更复杂)。
  • jsbin.com/mubenaze/21 完美,明天我试试我的原始代码(如果可行,我会点击设置接受答案)。
  • eheh 是的,如果有很多 div 需要管理,.not(this).droppable 是一个非常好的主意。
猜你喜欢
  • 2018-09-23
  • 2011-01-05
  • 1970-01-01
  • 2015-03-28
  • 2019-03-28
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多