2012-01-23 18 views
6

En lugar de utilizar una etiqueta html input type="file", ¿es posible abrir un cuadro de diálogo choose a file to upload haciendo clic en input type="button"? Luego, cuando se selecciona un archivo del cuadro de diálogo choose a file to upload, la ruta del archivo se inserta en una etiqueta normal html input type="text"?Botón para mostrar elegir un archivo para cargar el cuadro de diálogo

Parece que gmail hace algo similar, pero no con botones y entradas de texto, simplemente tienen un enlace add file o algo así. Cuando se hace clic en ese enlace, se muestra el cuadro de diálogo select file(s) to upload by mail.google.com. Cuando se hace clic en un archivo, el nombre del archivo se muestra en la pantalla.

¿Cómo están haciendo eso?

+1

Si haces clic derecho en "Adjuntar un archivo" en Gmail, verás que lo hicieron con Flash. – Aknosis

Respuesta

3

Creo que la mayoría de los navegadores lo tienen bloqueado por razones de seguridad. Los botones y cuadros de texto se pueden manipular a través de JavaScript. Los cuadros de entrada de archivos no pueden, y por una buena razón; imagine si un javascript podría abrir un diálogo, establecer la ruta a un archivo sensible en su sistema, luego simular el botón, haga clic para descargar el archivo.


Por cierto, si usted está buscando el estilo, tal vez esto funcionaría: http://www.quirksmode.org/dom/inputfile.html

+0

No hace gmail hacer algo similar, pero en vez de usar botones y tipos de entrada de texto, parece que están usando un enlace y posiblemente una etiqueta span o div para mostrar los archivos seleccionados. Donde el enlace muestra el cuadro de diálogo de carga? – oshirowanen

+1

Creo que GMail usa Flash para su función "Adjuntar". Si deshabilita el complemento de Flash, agrega buenas entradas de archivo a la moda. – Sam

0

No es posible alterar un input[type=file] como quiera, es un elemento de forma puramente nativo.

Además, no podrá obtener la ruta al archivo por razones de seguridad. Las versiones anteriores de IE muestran la ruta pero ya no es el caso con las versiones más nuevas y de todos modos no podrás hacer nada con la ruta en el lado del servidor.

Existen, sin embargo algunos métodos a estilo:

0

echar un vistazo a plupload, lo he usado muchas veces para manejar la carga de archivos .

1

Marque esta violín: http://jsfiddle.net/A4BS7/1/

NOTA:

a) Esto no puede funcionar bien en los navegadores antiguos (principalmente IE) que no disparan el evento de cambio en el archivo de entrada.

b) Para que la carga funcione como se espera, deberá incluir el elemento <input type="file"> en su formulario. El elemento de texto se puede usar para mostrar el archivo seleccionado en el mejor de los casos.

+0

cómo agregar el valor del archivo cargado a otro valor de archivo? – JohnB

4
<input type="file" style="display:none;" id="inputfile"/> 
<a href="javascript:document.getElementById('inputfile').click(); ">try this</a> 

Pruebe este. Creo que es útil ... :)

+0

Aunque se agradece el código, siempre debe tener una explicación adjunta. Esto no tiene que ser largo, una sola línea está bien, pero es necesaria. Llegué aquí desde una cola de moderación porque esto se marcó automáticamente. Mantener respuestas de alta calidad ayudará a prevenir eso. – Veedrac

+0

simple y brillante! – Sllouyssgort

+0

Gracias @Sllouyssgort –

Cuestiones relacionadas