2012-04-06 36 views
1

我有一個HTML5拖放腳本,允許用戶在#droparea中放置文件。 #droparea div的子元素也是div元素。爲什麼子元素會導致'滴'被調用(拖放文件上傳)?

<div id="droparea"> 
    <div id="showif_no_dragover">Drag files here!</div> 
    <div id="showif_dragover">Drop the files!</div> 
</div> 

相關聯的JavaScript/jQuery是:

var droptarget = "#droparea"; 
$(droptarget).live('dragenter', dragEnter); 
$(droptarget).live('dragleave', dragExit); 
$(droptarget).live('dragover', nothing); 
$(droptarget).live('drop', dropGo); 

方的問題:我應該使用.live()。對()或.bind()這裏)

我已經創建了一個示例jsFiddle,其中添加了一些代碼:http://jsfiddle.net/PwFr9/3/

如果看一下控制檯,您會注意到,當您在#dr中拖動文件時oparea,dragenter()和dragleave()被多次調用,即使拖動仍然在#droparea內。如果刪除子元素(#child1和#child2),則問題消失,因爲子元素不見了。我如何保持孩子的元素,並阻止他們搞砸事件?

我在沒有太多幫助的情況下搜索了Stackoverflow和Google幾個小時。我在Stackoverflow發現了這個問題:How to keep child elements from interfering with HTML5 dragover and drop events? 雖然我不知道它爲什麼會起作用。

我已經嘗試將2個div元素放在彼此的頂部(通過CSS定位)。最上面的div有附加的拖拽事件,而最底部的div有子元素。我不喜歡這種方法,因爲它不適用於我的頁面的其餘部分,並且不允許鼠標點擊與最底部div的交互。

回答

相關問題