2011-11-25 111 views
14

我正在使用本机在JavaScript中拖放 API。如何在删除成功后从DOM中删除拖动的元素?JavaScript拖放:删除拖动元素成功后下降

  • 我试着听下降事件,但这只能得到它落到并没有参考元素被拖动的元素上触发。
  • 我试着听dragend元素,但这并不让我知道是否成功下降。
  • 我试图避免存储被拖动到全局变量中的元素,因为如果在不同的标签或浏览器之间发生拖动,这会导致问题。

下面是一个例子:http://jsfiddle.net/KNG6n/3/

的可拖进箱字母列表。当一个字母的节点被放在方框上时,我希望它从列表中移除(不影响包含相同字母的任何其他列表项目)

回答

11

监听dragend事件,并与拖动的元素做任何事情之前检查dataTransfer对象的dropEffect来变量:在被拖拽

htmlElement.addEventListener('dragend', function(event){ 
    if(event.dataTransfer.dropEffect !== 'none'){ 
     $(this).remove(); 
    } 
}); 
+0

显然,在Windows上的Chrome中,dropEffect始终没有任何效果,该错误报告已打开多年:https://code.google.com/p/chromium/issues/detail?id=39399 – marcelj

0

一种方法是将此分配给变量作用域dragstart,并在丢弃时使用该元素。

See this fiddle.

+0

我试图避免存储元件全局变量,因为如果在不同的标签或浏览器之间发生拖动,这会导致问题。 – lucas

4

另外看看这个例子:http://html5demos.com/drag

变种EL =的document.getElementById(e.dataTransfer.getData( '文本'));

el.parentNode.removeChild(el); 
+0

该解决方案仅适用于所有元素都有ID(我不知道)。另外,这意味着你必须将数据设置为id,而不是有用的。 – lucas