2012-03-03 121 views
54

是否可以使用jQuery的drop事件從桌面拖動文件?如何使用jQuery的拖放事件上傳從桌面拖動的文件?

如果是這樣,我該如何獲取丟棄的文件數據?

+1

的可能重複[HTML5的jQuery的文件API的例子嗎?(http://stackoverflow.com/questions/4722500/html5s-file-api-example-with-jquery) – 2012-03-06 03:36:23

回答

114

這是有點混亂(你需要處理至少3個事件),但可能的。

首先,你需要添加事件處理器爲dragoverdragenter,防止默認操作爲這些事件這樣的:

$('#div').on(
    'dragover', 
    function(e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 
) 
$('#div').on(
    'dragenter', 
    function(e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 
) 

然後你就可以用e.originalEvent.dataTransfer.files添加下拉式處理器和訪問丟棄的文件:

$('#div').on(
    'drop', 
    function(e){ 
     if(e.originalEvent.dataTransfer){ 
      if(e.originalEvent.dataTransfer.files.length) { 
       e.preventDefault(); 
       e.stopPropagation(); 
       /*UPLOAD FILES HERE*/ 
       upload(e.originalEvent.dataTransfer.files); 
      } 
     } 
    } 
); 

現在您可以從div中的desktop/explorer/finder中拖動文件並訪問它們。

http://jsfiddle.net/fSA4N/5/

+7

爲什麼你需要壓制默認dragover和dragenter行爲? – 2012-12-11 04:31:02

+2

當您開始將文件拖入瀏覽器時,某些瀏覽器會執行一些奇怪的操作。這不是真的有必要。通過這些事件,您還可以添加一些不錯的功能,例如突出顯示要刪除文件的div。 – Alex 2013-01-31 10:29:21

+0

有可能以某種方式使用e.originalEvent.dataTransfer.files並將其設置爲文件輸入? – loostro 2013-02-04 13:19:13