2011-11-25 115 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