Me gustaría hacer que un evento de clic se active en una <input type="file">
etiqueta mediante programación.
Simplemente llamar a click () no parece hacer nada o al menos no aparece un cuadro de diálogo de selección de archivo.
He estado experimentando con la captura de eventos usando oyentes y redirigiendo el evento, pero no he podido lograr que se realice el evento como si alguien hubiera hecho clic en él.
javascript
html
usuario28655
fuente
fuente
Respuestas:
No se puede hacer eso en todos los navegadores, supuestamente IE lo permite, pero Mozilla y Opera no.
Cuando redacta un mensaje en GMail, la función 'adjuntar archivos' se implementa de una manera para IE y cualquier navegador que lo admita, y luego se implementa de otra manera para Firefox y aquellos navegadores que no lo hacen.
No sé por qué no puede hacerlo, pero una cosa que es un riesgo para la seguridad y que no está permitido hacer en ningún navegador es establecer mediante programación el nombre del archivo en el elemento Archivo HTML.
fuente
input
elemento del archivo está visible. Activar elclick
método funciona, incluso en la consola, si se puede ver el elemento.He estado buscando una solución para todo este día. Y estas son las conclusiones que he hecho:
¡Espero que esto ayude! :)
fuente
Puede disparar click () en cualquier navegador, pero algunos navegadores necesitan que el elemento esté visible y enfocado. Aquí hay un ejemplo de jQuery:
Funciona con el hide antes del,
click()
pero no sé si funciona sin llamar al método show. Nunca probé esto en Opera, lo probé en IE / FF / Safari / Chrome y funciona. Espero que esto sea de ayuda.fuente
$(...).show().focus().click().hide();
:)ESTO ES POSIBLE: Bajo FF4 +, Opera?, Chrome: pero:
inputElement.click()
debe llamarse desde el contexto de acción del usuario! (no contexto de ejecución de script)<input type="file" />
debe ser visible (inputElement.style.display !== 'none'
) (puede ocultarlo con visibilidad u otra cosa, pero no con la propiedad "mostrar")fuente
onclick
atributo en lugar de vincularlo al evento.inputElement.click()
desde un evento keydown (acceso directo para adjuntar un archivo) funcionaban, pero no lo hacía en un tiempo de espera o devolución de llamada ajax. Votadothis
. : /Para aquellos que entienden que tienes que superponer una forma invisible sobre el enlace, pero son demasiado flojos para escribir, lo escribí para ti. Bueno, para mí, pero bien podría compartir. Comentarios son bienvenidos
HTML (en alguna parte):
HTML (en algún lugar que no te interese):
JavaScript:
fuente
Pruebe esta solución: http://code.google.com/p/upload-at-click/
fuente
simplemente use una etiqueta, de esa manera puede ocultar la entrada y hacer que funcione a través de su etiqueta relacionada https://developer.mozilla.org/fr/docs/Web/HTML/Element/Label
fuente
Si desea que el
click
método funcione en Chrome, Firefox, etc., aplique el siguiente estilo a su archivo de entrada. Estará perfectamente oculto, es como si hicieras undisplay: none;
Es así de simple, ¡probé que funciona!
fuente
height
ywidth
para0
?Me funcionó cuando me encontré con un problema similar, es un eRube Goldberg normal.
fuente
Permítanme agregar a esta publicación anterior, una solución de trabajo que solía usar que funciona en probablemente el 80% o más de todos los navegadores tanto nuevos como antiguos.
La solución es compleja pero simple. El primer paso es hacer uso de CSS y disimular el tipo de archivo de entrada con "subelementos" que se muestran ya que tiene una opacidad de 0. El siguiente paso es usar JavaScript para actualizar su etiqueta según sea necesario.
Ejemplo de trabajo de jsFiddle
fuente
Funciona :
Por razones de seguridad en Firefox y Opera, no puede activar el clic en la entrada del archivo, pero puede simular con MouseEvents:
fuente
createEvent()
yinitMouseEvent()
ahora están en desuso.Sé que esto es antiguo, y todas estas soluciones son trucos en torno a las precauciones de seguridad del navegador con un valor real.
Dicho esto, a partir de hoy, fileInput.click () funciona en Chrome actual (36.0.1985.125 m) y Firefox ESR actual (24.7.0), pero no en IE actual (11.0.9600.17207). La superposición de un campo de archivo con opacidad 0 en la parte superior de un botón funciona, pero quería un elemento de enlace como activador visible, y el subrayado de desplazamiento no funciona en ningún navegador. Parpadea y luego desaparece, probablemente el navegador piensa si el estilo de desplazamiento realmente se aplica o no.
Pero encontré una solución que funciona en todos esos navegadores. No afirmaré haber probado todas las versiones de cada navegador, o que sé que seguirá funcionando para siempre, pero parece que ahora satisface mis necesidades.
Es simple: coloque el campo de entrada del archivo fuera de la pantalla (posición: absoluto; arriba: -5000 px), coloque un elemento de etiqueta a su alrededor y active el clic en la etiqueta, en lugar del campo del archivo en sí.
Tenga en cuenta que el enlace debe estar programado para llamar al método de clic de la etiqueta, no lo hace automáticamente, como cuando hace clic en el texto dentro de un elemento de etiqueta. Aparentemente, el elemento de enlace captura el clic y no llega a la etiqueta.
Tenga en cuenta también que esto no proporciona una forma de mostrar el archivo seleccionado actualmente, ya que el campo está fuera de pantalla. Quería enviar de inmediato cuando se seleccionó un archivo, por lo que no es un problema para mí, pero necesitará un enfoque algo diferente si su situación es diferente.
fuente
JS Fiddle: http://jsfiddle.net/eyedean/1bw357kw/
fuente
Este código me funciona. ¿Es esto lo que estas tratando de hacer?
fuente
Mi solución para Safari con jQuery y jQuery-ui:
fuente
Aquí hay una solución de JavaScript pura para este problema. Funciona bien en todos los navegadores
fuente
Hay formas de redirigir los eventos al control, pero no espere poder disparar fácilmente los eventos al control de incendios usted mismo, ya que los navegadores intentarán bloquearlo por (buenas) razones de seguridad.
Si solo necesita que se muestre el cuadro de diálogo de archivo cuando un usuario hace clic en algo, digamos que si desea que los botones de carga de archivos se vean mejor, es posible que desee echar un vistazo a lo que se le ocurrió a Shaun Inman .
He podido lograr la activación del teclado con un cambio creativo de enfoque dentro y fuera del control entre los eventos de pulsación de tecla, pulsación de tecla y activación de teclas. YMMV.
Mi sincero consejo es dejar esto solo, porque este es un mundo de dolor de incompatibilidad del navegador. Las actualizaciones menores del navegador también pueden bloquear trucos sin previo aviso y es posible que deba reinventar los hacks para que siga funcionando.
fuente
Estaba investigando esto hace un tiempo porque quería crear un botón personalizado que abriera el diálogo del archivo e iniciara la carga de inmediato. Acabo de notar algo que podría hacer esto posible: Firefox parece abrir el cuadro de diálogo cuando hace clic en cualquier parte de la carga. Entonces lo siguiente podría hacerlo:
Esto es solo teórico ya que ya usé otro método para resolver el problema, pero podría funcionar.
fuente
Tenía una
<input type="button">
etiqueta oculta a la vista. Lo que hice fue adjuntar el"onClick"
evento a cualquier componente visible de cualquier tipo, como una etiqueta. Esto se realizó utilizando las Herramientas para desarrolladores de Google Chrome o Firebug de Mozilla Firefox utilizando el comando "editar HTML" con el botón derecho. En este caso, especifique el siguiente script o algo similar:Si tienes JQuery:
si no:
Gracias.
fuente
Hola, esta solución funciona. para descargar deberíamos estar usando MSBLOB
Para AngularJS o incluso para JavaScript normal.
fuente
Esto ahora será posible en Firefox 4, con la advertencia de que cuenta como una ventana emergente y, por lo tanto, se bloqueará siempre que haya sido una ventana emergente.
fuente
Aquí hay una solución que funciona para mí: CSS:
HTML con ayuda "pequeña" de JQuery:
Solo asegúrate de que maskfied esté cubierto completamente por el campo de carga real.
fuente
Puede hacerlo según la respuesta del cuadro de diálogo Abrir archivo en la etiqueta <a>
fuente
Descubrí que si la entrada (archivo) está fuera del formulario, el evento de clic de disparo invoca el diálogo del archivo.
fuente
Espero que esto ayude a alguien: pasé 2 horas golpeándome la cabeza:
En IE8 o IE9, si activa la apertura de una entrada de archivo con javascript de alguna manera (créame, los he probado todos), no le permitirá enviar el formulario usando javascript, simplemente fallará en silencio.
Enviar el formulario a través de un botón de envío regular puede funcionar pero llamando a form.submit (); fallará en silencio.
Tuve que recurrir a la superposición de mi botón de selección de archivo con una entrada de archivo transparente que funciona.
fuente
Esto funcionó para mí:
fuente
no es imposible:
Pero de alguna manera funciona solo si está en una función que se llamó a través de un evento de clic.
Entonces puede tener la siguiente configuración:
html:
JavaScript:
fuente
createEvent()
yinitMouseEvent()
quedaron en desuso. Tienes que usar unCustomEvent()
ahora ...Puedes usar
fuente