Eu tenho um elemento de entrada de arquivo oculto. É possível acionar sua caixa de diálogo de seleção de arquivo a partir do evento de clique de um botão?
javascript
jquery
html
tamakisquare
fonte
fonte
click()
umadisplay:none
entrada e funcionouclick()
em um elemento comdisplay: none
obras! ;) Como as coisas mudaram nos últimos quatro anos.hidden
vez disso, você pode usar o atributostyle="visibility:hidden"
:<input id="myInput" type="file" hidden>
( w3schools.com/tags/att_global_hidden.asp )A maioria das respostas aqui não contém informações úteis:
Sim, você pode clicar programaticamente no elemento de entrada usando jQuery / JavaScript, mas apenas se fizer isso em um manipulador de eventos pertencente a um evento QUE FOI INICIADO PELO USUÁRIO!
Assim, por exemplo, nada acontecerá se você, o script, clicar programaticamente no botão em um retorno de chamada ajax, mas se você colocar a mesma linha de código em um manipulador de eventos que foi gerado pelo usuário, ele funcionará.
PS A
debugger;
palavra-chave interrompe a janela de navegação se for anterior ao clique programático ... pelo menos no Chrome 33 ...fonte
$(staticElementParent).on("click", "dynamicChild", function(){})
debugger;
palavra - chave não interrompe mais o clique programáticoApenas para registro, existe uma solução alternativa que não requer javascript. É uma espécie de hack, explorando o fato de que clicar em um rótulo define o foco na entrada associada.
Você precisa de um
<label>
com umfor
atributo adequado (aponta para a entrada), opcionalmente estilizado como um botão (com bootstrap, usebtn btn-default
). Quando o usuário clica no rótulo, a caixa de diálogo é aberta, por exemplo:fonte
Não tenho certeza de como os navegadores lidam com cliques em
type="file"
elementos (questões de segurança e tudo), mas isso deve funcionar:Eu testei este JSFiddle no Chrome, Firefox e Opera e todos eles mostram a caixa de diálogo de navegação de arquivo.
fonte
hover
evento: jsfiddle.net/UQfaZ/1Eu envolvo o
input[type=file]
em uma tag de rótulo, estilizo de acordolabel
com sua preferência e oculto oinput
.Solução puramente CSS.
fonte
<input type="file" hidden>
para remover a necessidade de aplicar um estilo CSS.Nativamente, a única maneira é criar um
<input type="file">
elemento e, em seguida, simular um clique, infelizmente.Existe um pequeno plugin (plug sem vergonha) que vai tirar a dor de ter que fazer isso o tempo todo: file-dialog
fonte
A melhor solução, funciona em todos os navegadores .. até no celular.
Ocultar o tipo de arquivo de entrada causa problemas com os navegadores, a opacidade é a melhor solução porque não está ocultando, apenas não mostrando. :)
fonte
visibility:hidden
deve ser uma escolha melhor.visibility: hidden
ainda afeta o layout.display: none
é o que você quer.Não existe uma maneira cruzada de navegadores de fazer isso, por razões de segurança. O que as pessoas geralmente fazem é sobrepor o arquivo de entrada a qualquer outra coisa e definir sua visibilidade como oculta para que seja acionado por conta própria. Mais informações aqui.
fonte
<input type="file">
, não<select>
.$.click()
.Certifique-se de que está usando vinculação para obter adereços de componente em REACT
fonte
Usando jQuery você pode chamar
click()
para simular um clique.fonte
Isso funcionou para mim:
fonte
Para quem quer o mesmo, mas está usando React
fonte
fonte