Quero limpar a entrada do arquivo no meu formulário.
Eu sei sobre como definir as fontes para o mesmo método ... Mas esse método não apaga o caminho do arquivo selecionado.
Nota : Gostaria de evitar a necessidade de recarregar a página, redefinir o formulário ou realizar uma chamada AJAX.
Isso é possível?
javascript
html
thomaux
fonte
fonte
Existem três maneiras de limpar a entrada de arquivo com javascript:
defina a propriedade value como vazia ou nula.
Funciona para o IE11 + e outros navegadores modernos.
Crie um novo elemento de entrada de arquivo e substitua o antigo.
A desvantagem é que você perderá ouvintes de eventos e propriedades de expando.
Redefina o formulário do proprietário pelo método form.reset ().
Para evitar afetar outros elementos de entrada no mesmo formulário do proprietário, podemos criar um novo formulário vazio e anexar o elemento de entrada do arquivo a esse novo formulário e redefini-lo. Dessa forma, funciona para todos os navegadores.
Eu escrevi uma função javascript. demo: http://jsbin.com/muhipoye/1/
fonte
tl; dr : para navegadores modernos, basta usar
Resposta antiga:
E se:
Ainda preciso entender por que isso não funciona com o webkit .
De qualquer forma, isso funciona com o IE9>, Firefox e Opera.
A situação com o webkit é que parece que não consigo alterá-lo novamente para o arquivo.
Com o IE8, a situação é que ele lança uma exceção de segurança.
Edit: Para webkit, Opera e firefox, isso funciona, no entanto:
(verifique a resposta acima com esta proposta)
Vou ver se consigo encontrar uma maneira mais limpa de fazer esse navegador cruzado sem a necessidade do GC.
Edit2:
Funciona com a maioria dos navegadores. Não funciona com o IE <9, isso é tudo.
Testado no firefox 20, chrome 24, opera 12, IE7, IE8, IE9 e IE10.
fonte
Definir o valor para
''
não funciona em todos os navegadores.Em vez disso, tente definir o valor da seguinte
null
forma:EDIT: Eu recebo os motivos de segurança muito válidos para não permitir que o JS defina a entrada do arquivo, no entanto, parece razoável fornecer um mecanismo simples para limpar a seleção de saída já selecionada. Tentei usar uma string vazia, mas ela não funcionou em todos os navegadores,
NULL
funcionou em todos os navegadores que experimentei (Opera, Chrome, FF, IE11 + e Safari).EDIT: Observe que a configuração para
NULL
funciona em todos os navegadores enquanto a configuração para uma string vazia não.fonte
all browsers
... ele não funciona no IE8, IE9 ou IE10 (mas funciona no IE11).Infelizmente, nenhuma das respostas acima parece cobrir todas as bases - pelo menos não nos meus testes com javascript vanilla.
.value = null
parece funcionar no FireFox, Chome, Opera e IE11 (mas não no IE8 / 9/10).cloneNode
(e.clone()
no jQuery) no FireFox parece copiar o.value
excesso, tornando o clone inútil.Então, aqui está a função javascript vanilla que eu escrevi que funciona no FireFox (27 e 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... esses são os únicos navegadores disponíveis atualmente para eu testar.
O
ctrl
parâmetro é a própria entrada do arquivo, portanto a função seria chamada como ...fonte
if
declaração não deve ser colocada dentro docatch
bloco?null
. Importa-se de explicar qual é o sentido de colocarctrl.value = null;
dentro de umtry...catch
bloco então? Desculpe pela nova pergunta.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- em que ponto, na verdade, limpamos o valor, já quecloneNode
também o copia?SOLUÇÃO
O código a seguir funcionou para mim com o jQuery. Ele funciona em todos os navegadores e permite preservar eventos e propriedades personalizadas.
DEMO
Veja este jsFiddle para código e demonstração.
LINKS
Limpando <input type = 'file' /> usando jQuery
Como redefinir a entrada de arquivo com JavaScript
fonte
Você precisa substituí-lo por uma nova entrada de arquivo. Aqui está como isso pode ser feito com o jQuery:
e use esta linha quando precisar limpar o campo de entrada (em algum evento, por exemplo):
fonte
Edit:
Este não funciona no IE e na ópera, mas parece funcionar para o Firefox, Safari e Chrome.
fonte
Eu estava tendo o mesmo problema e eu vim com isso.
fonte
Isso é realmente muito fácil.
fonte
Eu tenho procurado uma maneira simples e limpa de limpar a entrada de arquivos HTML, as respostas acima são ótimas, mas nenhuma delas realmente responde ao que estou procurando, até que me deparei com a Web com uma maneira simples e elegante de fazer isso:
todo o crédito é para Chris Coyier .
fonte
As respostas acima oferecem soluções um pouco desajeitadas pelos seguintes motivos:
Eu não gosto de ter que fazer
wrap
oinput
primeiro e, em seguida, obter o html, é muito envolvido e sujo.O JS entre navegadores é útil e parece que, neste caso, há muitas incógnitas para usar a
type
comutação de maneira confiável (que, novamente, é um pouco suja) e definirvalue
como''
Então, ofereço minha solução baseada em jQuery:
Ele faz o que diz, substitui a entrada por um clone de si mesmo. O clone não terá o arquivo selecionado.
Vantagens:
Resultado: programador feliz
fonte
Cross browser compatibility
... meus testes mostram que o Firefox cópias sobre o.value
como parte do.clone()
, portanto, tornando-o inútilreplaceWith
? Eu estou usandoclone()
a mim mesmo e ele está bem no firefox de trabalho (eu não sei se este é ainda o caso para você, um ano depois =))Aqui estão meus dois centavos, os arquivos de entrada são armazenados como matriz, então aqui está como anulá-lo
isso retorna uma matriz vazia e funciona em todos os navegadores
fonte
O que me ajudou é que tentei buscar e fazer upload do último arquivo selecionado usando um loop, em vez de limpar a fila, e funcionou. Aqui está o código.
Espero que isso possa ajudar alguns.
fonte
Tentei a maioria das soluções, mas parecia que ninguém funcionava. No entanto, eu encontrei um passeio por ele abaixo.
A estrutura do formulário é:
form
=>label
,input
esubmit button
. Depois de escolher um arquivo, o nome do arquivo será mostrado pelo rótulo, manualmente, em JavaScript.Portanto, minha estratégia é: inicialmente o envio
button
é desativado, depois que um arquivo é escolhido, odisabled
atributo do botão enviar será removido para que eu possa enviar o arquivo. Depois do envio, limpo olabel
que faz com que pareça limpar o arquivo,input
mas na verdade não. Depois, desabilitarei o botão Enviar novamente para impedir o envio do formulário.Ao definir o envio
button
disable
ou não, interrompo o envio do arquivo várias vezes, a menos que escolha outro arquivo.fonte
Mudei para digitar texto e voltei a digitar para arquivo usando setAttribute
fonte