2013-10-28 105 views
8

我有幾個元素拖動HTML5 dragend事件觸發立即

<div Class="question-item" draggable="true">Box 1: Milk was a bad choice.</div> 
<div class="question-item" draggable="true">Box 2: I'm Ron Burgundy?</div> 
<div class="question-item" draggable="true">Box 3: You ate the entire wheel of cheese?  </div> 
<div class="question-item" draggable="true">Box 4: Scotch scotch scotch</div> 

和我有以下事件處理程序:

var $questionItems = $('.question-item'); 

$questionItems 
    .on('dragstart', startDrag) 
    .on('dragend', removeDropSpaces) 
    .on('dragenter', toggleDropStyles) 
    .on('dragleave', toggleDropStyles); 


function startDrag(e){ 
    console.log('dragging...'); 
    addDropSpaces(); 
    e.stopPropagation(); 
} 

function toggleDropStyles(){ 
    $(this).toggleClass('drag-over'); 
    console.log(this); 
} 


function addDropSpaces(){ 
    $questionItems.after('<div class="empty-drop-target"></div>'); 
} 

function removeDropSpaces(){ 
    console.log("dragend"); 
    $('.empty-drop-target').remove() 
} 

爲什麼它僅適用於第一拖動工作。如果我拖動說最後一個可拖動 - dragend事件立即觸發。 (我不想使用jQuery UI順便說一句)

它對我來說沒有意義 - 它看起來像一個錯誤。

我在OSX上的Chrome v 30上。

這裏是對的jsfiddle鏈接:http://jsfiddle.net/joergd/zGSpP/17/

(編輯:這是以下問題的重複:dragend, dragenter, and dragleave firing off immediately when I drag - 但我認爲原來的海報很好去與jQuery UI的,而我希望它是HTML5 native)

回答

4

我沒有直接的解決方案,但在dragStart事件處理程序中更改DOM會導致此問題,並且任何更改DOM的代碼都應該真正進入dragEnter事件處理程序 - 這樣做,請拖動&放置事件被更可靠地觸發。

不知道這是否是由設計 - 它感覺有點像一個錯誤。

3

這是一個已知的鉻問題。問題是,因爲Joerg提到你在dragstart上操縱dom。

您可以這樣做,但您需要在超時時間內完成。