2012-03-03 5 views

risposta

114

È un po 'disordinato (è necessario gestire almeno 3 eventi) ma possibile.

In primo luogo, è necessario aggiungere eventhandlers per dragover e dragenter e prevenire le azioni predefinite per questi eventi del genere:

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

Quindi è possibile aggiungere il drop-conduttore e accedere ai file rilasciati con 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); 
      } 
     } 
    } 
); 

Ora è possibile trascinare i file dal desktop/explorer/finder nel div e accedervi.

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

+7

Perché avete bisogno sopprimere il comportamento predefinito di dragover e dragenter? –

+2

Alcuni browser fanno alcune cose strane quando si avvia il trascinamento di un file nel browser. Non è davvero necessario. Con questi eventi, potresti anche aggiungere alcune funzioni interessanti come evidenziare il div in cui devi rilasciare il file. – Alex

+0

è possibile utilizzare in qualche modo e.originalEvent.dataTransfer.files e impostarlo sull'input del file? – loostro

Problemi correlati