2012-05-29 9 views
10

Duplicar posible:
Jquery trigger file input¿Cómo vincular un botón de entrada a una ventana de selección de archivo?

estoy trabajando en una forma que permite a los usuarios subir imágenes a un sitio web. Hasta ahora tengo una solución de arrastrar y soltar que funciona en Chrome y Safari. Sin embargo, también necesito apoyar la acción de los usuarios que hacen clic en un botón y buscan archivos de la manera tradicional.

Similar a lo que esto haría:

<input type="file" name="my_file"> 

Sin embargo en lugar de tener el área de descripción del archivo torpe y botón Examinar no editable que prefieren usar algo como esto:

<input type="button" id="get_file"> 

Mi pregunta por lo tanto, ¿cómo puedo hacer que este botón abra una ventana de selección de archivos y procese la selección de la misma manera en que funcionaría type="file"?

Saludos.


mi solución

HTML:

<input type="button" id="my-button" value="Select Files"> 
<input type="file" name="my_file" id="my-file"> 

CSS:

#my-file { visibility: hidden; } 

jQuery:

$('#my-button').click(function(){ 
    $('#my-file').click(); 
}); 

Trabajando en Chrome, Firefox e IE7 + hasta ahora (no han probado IE6).

+2

Hay millones de otros pero no tienen tiempo para elegir el mejor duplicado – Esailija

+1

Compruebe esto http://stackoverflow.com/questions/7132553/jquery-trigger-how-can-i-trigger-the-browse- file-in-the-input-when-i-click-on-a. Puede ser que te ayude. – TRR

+0

@Esailija ¿dónde está pidiendo jQuery? enlace pero no engañado. – rlemon

Respuesta

13

Puede usar JavaScript y disparar la entrada del archivo oculto cuando se hace clic en la entrada del botón.

http://jsfiddle.net/gregorypratt/dhyzV/ - sencilla

http://jsfiddle.net/gregorypratt/dhyzV/1/ - más elegante con un poco de jQuery

O bien, puede labrar un div directamente sobre la entrada de archivos y establecer pointer-events en CSS para ninguno de permitir que los eventos de clic para pasar a través de la entrada de archivo que está "detrás" de la div imaginaria.Esto solo funciona en ciertos navegadores; http://caniuse.com/pointer-events

+0

no había oído hablar de 'pointer-events' antes. Desafortunadamente, no es una gran solución, ya que quiero que esto funcione en versiones anteriores de IE. La solución jsfiddle se ve bien aunque ... Lo intentaré tan bien como las sugerencias de las anteriores. – diggersworld

+0

Feliz de ayudar. Podría tener un bit separado de CSS para IE que oculte el div elegante y muestre la entrada de archivo estándar como una especie de respaldo. – Greg

+0

Cuidado con la pantalla: ninguno en los elementos del archivo de entrada. https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/ – lenord

3

Si desea permitir que el usuario busque un archivo, necesita tener un input type="file" Lo más cercano que podría obtener a su requerimiento sería colocar el input type="file" en la página y ocultarlo. A continuación, activar el evento clic de la entrada cuando se hace clic en el botón:

#myFileInput { 
    display:none; 
} 

<input type="file" id="myFileInput" /> 
<input type="button" 
     onclick="document.getElementById('myFileInput').click()" 
     value="Select a File" /> 

Aquí es a working fiddle.

Nota: No recomendaría este enfoque. El input type="file" es el mecanismo que los usuarios están acostumbrados a usar para cargar un archivo.

+0

No puede disparar haga clic en el archivo de tipo de entrada para abrir el cuadro de diálogo de archivos, quizás en firefox – Esailija

+0

Funciona para mí en Chrome 19/Linux – rlemon

+0

Puede ser porque la pila de llamadas comienza con una acción del usuario como clic ... pero aún así ¿por qué En este trabajo, sería algo fácil engañar a alguien para que le dé acceso a los archivos – Esailija

Cuestiones relacionadas