Estou tentando acionar uma caixa de upload (botão de navegação) usando o jQuery.
O método que eu tentei agora é:
$('#fileinput').trigger('click');
Mas isso não parece funcionar. Por favor ajude. Obrigado.
javascript
jquery
css
Alec Smart
fonte
fonte
Respostas:
Isso ocorre devido a uma restrição de segurança.
Eu descobri que a restrição de segurança é apenas quando o
<input type="file"/>
está definido comodisplay:none;
ou estávisbilty:hidden
.Então, eu tentei posicioná-lo fora da janela, definindo
position:absolute
etop:-100px;
e voilà ele funciona.veja http://jsfiddle.net/DSARd/1/
chame de hack.
Espero que funcione para você.
fonte
left: -100px;
. Você nunca sabe quanto tempo poderia ser uma páginaisso funcionou para mim:
JS:
HTML:
CSS:
>>> Outro que funciona em vários navegadores: <<<
A idéia é que você sobreponha um enorme botão "Procurar" invisível sobre o botão personalizado. Portanto, quando o usuário clica no botão personalizado, na verdade, ele está clicando no botão "Procurar" do campo de entrada nativo.
JS Fiddle: http://jsfiddle.net/5Rh7b/
HTML:
CSS:
JavaScript:
fonte
height
é sugerido que você mude paraheight: 100%
Você pode usar o elemento LABEL ex.
Isso acionará o arquivo de entrada
fonte
Eu tenho que trabalhar (= testado) no IE8 +, recente FF e chrome:
A chave está focada antes de disparar o clique (caso contrário, o Chrome o ignora).
Nota: você PRECISA ter sua entrada exibida e visível (como em, não
display:none
e nãovisibility:hidden
). Sugiro (como muitos outros já fizeram) posicionar absolutamente a entrada e jogá-la para fora da tela.fonte
Veja meu violino.
http://jsfiddle.net/mohany2712/vaw8k/
fonte
adardesign acertou em cheio o elemento de entrada do arquivo que está sendo ignorado quando está oculto. Também notei muitas pessoas mudando o tamanho do elemento para 0 ou empurrando-o para fora dos limites com ajustes de posicionamento e transbordamento. Todas essas são ótimas idéias.
Uma maneira alternativa que também parece funcionar perfeitamente bem é definir a opacidade como 0 . Em seguida, você sempre pode definir a posição para evitar que outros elementos sejam compensados, como o hide faz. Parece um pouco desnecessário deslocar um elemento quase 10K pixels em qualquer direção.
Aqui está um pequeno exemplo para quem quer um:
fonte
Por uma questão de curiosidade, você pode fazer o que quiser, criando dinamicamente um formulário de upload e um arquivo de entrada, sem adicioná-lo à árvore do DOM:
Não é necessário adicionar o uploadForm ao DOM.
fonte
Código correto:
fonte
Isso é proposital e por design. É uma questão de segurança.
fonte
Na verdade, descobri um método muito fácil para isso, que é:
Dessa forma, o campo de entrada do arquivo pode ter a propriedade css exibida em none e ainda ganhar o comércio :)
fonte
É tarde demais para responder, mas acho que essa configuração mínima funciona melhor. Eu também estou procurando o mesmo.
// css
jsbin
demo de botões de entrada de arquivo de inicialização
fonte
Essa é uma pergunta muito antiga, mas infelizmente esse problema ainda é relevante e requer uma solução.
A solução (surpreendentemente simples) que eu encontrei é "ocultar" o campo de entrada do arquivo real e envolvê-lo com uma tag LABEL (pode ser baseada no Bootstrap e HTML5, para aprimoramento).
See here:
Exemplo de código aquiDessa forma, o campo de entrada do arquivo real é invisível e tudo o que você vê é o "botão" personalizado, que na verdade é um elemento LABEL modificado. Quando você clica nesse elemento LABEL, a janela para selecionar um arquivo é exibida e o arquivo escolhido entra no campo de entrada do arquivo real.
Além disso, você pode manipular a aparência e o comportamento que desejar (por exemplo: obtenha o nome do arquivo selecionado no arquivo de entrada do arquivo, depois de selecionado, e mostre-o em algum lugar. O elemento LABEL não faz isso automaticamente, é claro.Eu geralmente coloco dentro do LABEL, como seu conteúdo de texto).
Cuidado, porém! A manipulação da aparência e do comportamento disso é limitada ao que você possa imaginar e pensar. ;-) ;-)
fonte
Eu consegui com um simples $ (...). Click (); com o JQuery 1.6.1
fonte
ou então simplesmente
fonte
Eu tive problemas com a validação personalizada do lado do cliente
<input type="file"/>
enquanto usava um botão falso para acioná-lo e a solução do @Guillaume Bodi funcionou para mim (também com oopacity: 0;
chrome)e estilo css para entrada de upload
fonte
Tente isso, é um hack. a Posição: absoluto é para o Chrome e gatilho ('alteração') é para o IE.
fonte
$.browser
é obsoleto em versões mais recentes do jQueryMeu problema era um pouco diferente no iOS 7. Acontece que o FastClick estava causando problemas. Tudo o que eu precisava fazer era adicionar
class="needsclick"
ao meu botão.fonte
Esta é provavelmente a melhor resposta, tendo em mente os problemas entre navegadores.
CSS:
JS:
HTML:
fonte
Acho que entendi o seu problema, porque tenho um similar. Para que a tag
<label>
tenha o atributo, você pode usá-lo para vincular sua entrada com type = "file". Mas se você não deseja ativar isso usando esse rótulo, porque algumas regras do seu layout, você pode fazer assim.É claro que você adaptará isso para seu próprio objetivo e layout, mas é a maneira mais fácil que eu conheço para fazê-lo funcionar!
fonte
Com base na resposta de Guillaume Bodi, fiz o seguinte:
o que significa que está oculto para começar e, em seguida, exibido para o gatilho e oculto novamente imediatamente.
fonte