Quiero borrar la entrada del archivo en mi formulario.
Sé cómo configurar las fuentes con el mismo método ... Pero ese método no borrará la ruta del archivo seleccionado.
Nota : Me gustaría evitar tener que volver a cargar la página, restablecer el formulario o realizar una llamada AJAX.
es posible?
javascript
html
thomaux
fuente
fuente
Hay 3 formas de borrar la entrada de archivos con javascript:
Establezca la propiedad de valor en vacío o nulo.
Funciona para IE11 + y otros navegadores modernos.
Cree un nuevo elemento de entrada de archivo y reemplace el anterior.
La desventaja es que perderá oyentes de eventos y propiedades de expansión.
Restablezca el formulario del propietario a través del método form.reset ().
Para evitar afectar a otros elementos de entrada en el mismo formulario de propietario, podemos crear un nuevo formulario vacío y agregar el elemento de entrada de archivo a este nuevo formulario y restablecerlo. De esta manera funciona para todos los navegadores.
Escribí una función de JavaScript. demostración: http://jsbin.com/muhipoye/1/
fuente
tl; dr : para navegadores modernos, solo use
Vieja respuesta:
Qué tal si:
Todavía tengo que entender por qué esto no funciona con webkit .
De todos modos, esto funciona con IE9>, Firefox y Opera.
La situación con webkit es que parece que no puedo volver a cambiarlo a archivo.
Con IE8, la situación es que arroja una excepción de seguridad.
Editar: para webkit, Opera y firefox esto funciona, sin embargo:
(verifique la respuesta anterior con esta propuesta)
Veré si puedo encontrar una manera más limpia de hacer este navegador cruzado sin la necesidad del GC.
Edit2:
Funciona con la mayoría de los navegadores. No funciona con IE <9, eso es todo.
Probado en Firefox 20, Chrome 24, Opera 12, IE7, IE8, IE9 e IE10.
fuente
Establecer el valor en
''
no funciona en todos los navegadores.En su lugar, intente configurar el valor para que me
null
gusteEDITAR: Obtengo las razones de seguridad muy válidas para no permitir que JS configure la entrada del archivo, sin embargo, parece razonable proporcionar un mecanismo simple para borrar la selección de salida. Intenté usar una cadena vacía pero no funcionó en todos los navegadores,
NULL
funcionó en todos los navegadores que probé (Opera, Chrome, FF, IE11 + y Safari).EDITAR: tenga en cuenta que la configuración de
NULL
funciona en todos los navegadores mientras que la configuración de una cadena vacía no lo hizo.fuente
all browsers
... no funciona en IE8, IE9 o IE10 (pero funciona en IE11).Lamentablemente, ninguna de las respuestas anteriores parece cubrir todas las bases, al menos no con mis pruebas con vanilla javascript.
.value = null
parece funcionar en Firefox, Chome, Opera e IE11 (pero no en IE8 / 9/10).cloneNode
(y.clone()
en jQuery) en FireFox parece copiar el.value
over, haciendo que el clon no tenga sentido.Así que aquí está la función de Javascript de vainilla que he escrito que funciona en FireFox (27 y 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... estos son los únicos navegadores disponibles actualmente a mí para probarlo.
El
ctrl
parámetro es la entrada del archivo en sí, por lo que la función se llamaría como ...fuente
if
debería colocarse la declaración dentro delcatch
bloque?null
. ¿Entonces te importaría explicar cuál es el punto de ponerctrl.value = null;
dentro de untry...catch
bloque? Perdón por la nueva pregunta.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- ¿En qué punto borramos realmente el valor, ya quecloneNode
también lo copia?SOLUCIÓN
El siguiente código funcionó para mí con jQuery. Funciona en todos los navegadores y permite preservar eventos y propiedades personalizadas.
MANIFESTACIÓN
Vea este jsFiddle para código y demostración.
ENLACES
Borrar <input type = 'file' /> usando jQuery
Cómo restablecer la entrada de archivos con JavaScript
fuente
U necesita reemplazarlo con una nueva entrada de archivo. Así es como se puede hacer con jQuery:
y use esta línea cuando necesite borrar el campo de entrada (en algún evento, por ejemplo):
fuente
Editar:
este no funciona en IE y Opera, pero parece funcionar para Firefox, Safari y Chrome.
fuente
Estaba teniendo el mismo problema y se me ocurrió esto.
fuente
Eso es realmente bastante fácil.
fuente
He estado buscando una forma simple y limpia de borrar la entrada de archivos HTML, las respuestas anteriores son geniales, pero ninguna de ellas responde realmente a lo que estoy buscando, hasta que encontré en la web una forma simple y elegante de hacerlo:
Todo el crédito va para Chris Coyier .
fuente
Las respuestas anteriores ofrecen soluciones algo torpes por las siguientes razones:
No me gusta tener
wrap
elinput
primero y luego obtener el html, es muy complicado y sucio.El navegador cruzado JS es útil y parece que en este caso hay demasiadas incógnitas para usar el
type
cambio de manera confiable (que, de nuevo, es un poco sucio) y configurarlovalue
en''
Entonces le ofrezco mi solución basada en jQuery:
Hace lo que dice, reemplaza la entrada con un clon de sí mismo. El clon no tendrá el archivo seleccionado.
Ventajas:
Resultado: programador feliz
fuente
Cross browser compatibility
... mis pruebas muestran que FireFox copia sobre el.value
como parte del.clone()
, por lo que lo hace inútilreplaceWith
? Me estoy usandoclone()
y está funcionando bien en Firefox (no sé si este es el caso para usted un año después =))Aquí están mis dos centavos, los archivos de entrada se almacenan como una matriz, así que aquí es cómo anularlo
esto devuelve una matriz vacía y funciona en todos los navegadores
fuente
Lo que me ayudó es que traté de buscar y cargar el último archivo seleccionado usando un bucle, en lugar de borrar la cola, y funcionó. Aquí está el código.
Espero que esto pueda ayudar a algunos.
fuente
Probé la mayoría de las soluciones, pero no parecía que nadie trabajara. Sin embargo, encontré un paseo por debajo.
La estructura de la forma es:
form
=>label
,input
ysubmit button
. Después de elegir un archivo, la etiqueta mostrará el nombre de archivo al hacerlo manualmente en JavaScript.Entonces, mi estrategia es: inicialmente, el envío
button
está deshabilitado, después de elegir un archivo, eldisabled
atributo del botón enviar se eliminará de modo que pueda enviar el archivo. Después de enviar, borro lolabel
que hace que parezca que borro el archivoinput
pero en realidad no. Luego, deshabilitaré el botón Enviar nuevamente para evitar que envíe el formulario.Al configurar el envío
button
disable
o no, dejo de enviar el archivo muchas veces a menos que elija otro archivo.fuente
Cambié para escribir texto y volver a escribir en el archivo usando setAttribute
fuente