2012-03-03 12 views

Respuesta

114

Es un poco complicado (debe manejar al menos 3 eventos) pero es posible.

En primer lugar, es necesario agregar manejadores de sucesos para dragover y dragenter y prevenir las acciones predeterminadas para estos eventos por el estilo:

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

continuación, puede agregar el menú controlador y acceder a los archivos gotearon 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); 
      } 
     } 
    } 
); 

Ahora puede arrastrar archivos desde el escritorio/explorer/finder en el div y acceder a ellos.

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

+7

¿Por qué necesita para suprimir el comportamiento de dragover y dragenter por defecto? –

+2

Algunos navegadores hacen cosas raras cuando comienzas a arrastrar un archivo al navegador. No es realmente necesario. Con estos eventos, también puede agregar algunas características interesantes como destacar el div donde tiene que soltar el archivo. – Alex

+0

¿es posible utilizar de alguna manera e.originalEvent.dataTransfer.files y configurarlo para la entrada de archivos? – loostro

Cuestiones relacionadas