Bem, estou tentando enviar um formulário pressionando enter, mas não exibindo um botão de envio. Não quero entrar no JavaScript, se possível, pois quero que tudo funcione em todos os navegadores (a única maneira de JS que conheço é nos eventos).
No momento, o formulário fica assim:
<form name="loginBox" target="#here" method="post">
<input name="username" type="text" /><br />
<input name="password" type="password" />
<input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>
O que funciona muito bem. O botão enviar funciona quando o usuário pressiona enter e o botão não aparece no Firefox, IE, Safari, Opera e Chrome. No entanto, ainda não gosto da solução, pois é difícil saber se ela funcionará em todas as plataformas e em todos os navegadores.
Alguém pode sugerir um método melhor? Ou isso é tão bom quanto ele ganha?
Respostas:
Experimentar:
Isso pressionará o botão waaay para a esquerda, fora da tela. O bom disso é que você obteria uma degradação suave quando o CSS estiver desativado.
Atualização - solução alternativa para o IE7
Conforme sugerido por Bryan Downing + with
tabindex
para impedir que a guia atinja esse botão (de Ates Goral):fonte
position: absolute; width: 1px; height: 1px; left: -9999px;
tabindex="-1"
Eu acho que você deve seguir a rota Javascript, ou pelo menos eu:
fonte
keydown
dekeypress
para obter suporte mais amplo, mas você também precisa adicionare.preventDefault();
antesif
se desejar dar suporte ao Chrome..on('keypress'...)
lugar. Os documentos para.on()
parecerem.preventDefault()
adequados para você.Você já tentou isso?
Como a maioria dos navegadores entende
visibility:hidden
e realmente não funcionadisplay:none
, acho que tudo deve estar bem. Realmente não testei, então CMIIW.fonte
visibility: hidden
: como você pode ler em w3schools , visibity: nenhum ainda afeta o layout. Se você deseja evitar esse espaço em branco, a solução com posicionamento absoluto parece ser melhor para mim.<input type="submit" style="visibility: hidden; position: absolute;" />
position: absolute; left: -100px; width: 1px; height: 1px;
Outra solução sem o botão enviar:
HTML
jQuery
fonte
Para quem olha para essa resposta no futuro, o HTML5 implementa um novo atributo para os elementos do formulário
hidden
, que será aplicado automaticamentedisplay:none
ao seu elemento.por exemplo
fonte
Use o código a seguir, isso corrigiu meu problema nos três navegadores (FF, IE e Chrome):
Adicione a linha acima como uma primeira linha no seu código com o valor apropriado de nome e valor.
fonte
Em vez do hack que você usa atualmente para ocultar o botão, seria muito mais simples definir
visibility: collapse;
o atributo style. No entanto, eu ainda recomendaria o uso de um pouco de Javascript simples para enviar o formulário. Até onde eu entendo, o apoio a essas coisas é onipresente hoje em dia.fonte
Basta definir o atributo oculto como true:
fonte
A maneira mais elegante de fazer isso é manter o botão enviar, mas defina sua borda, preenchimento e tamanho da fonte como 0.
Isso fará com que as dimensões do botão sejam 0x0.
Você pode tentar fazer isso sozinho e, definindo um contorno para o elemento, verá um ponto, que é a borda externa "circundando" o elemento 0x0 px.
Não há necessidade de visibilidade: oculto, mas se isso faz você dormir à noite, também pode misturar isso.
JS Fiddle
fonte
O IE não permite pressionar a tecla ENTER para enviar o formulário se o botão enviar não estiver visível e o formulário tiver mais de um campo. Dê o que deseja, fornecendo uma imagem transparente de 1 x 1 pixel como um botão de envio. É claro que ele ocupará um pixel do layout, mas veja o que você precisa fazer para ocultá-lo.
fonte
Esta é a minha solução, testada no Chrome, Firefox 6 e IE7 +:
fonte
Isso funciona bem e é a versão mais explícita do que você está tentando alcançar.
Observe que há uma diferença entre
display:none
evisibility:hidden
para outros elementos do formulário.fonte
Solução HTML5
fonte
a maneira mais simples
fonte
Para quem tem problemas com o IE e para outros também.
fonte
float: left;
, quando removido, ele envia.Você pode tentar também isso
Você pode incluir uma imagem com largura / altura = 0 px
fonte
Eu trabalho com um monte de estruturas de interface do usuário. Muitos deles têm uma classe interna que você pode usar para ocultar visualmente as coisas.
Bootstrap
Material angular
Mentes brilhantes que criaram essas estruturas definiram esses estilos da seguinte maneira:
fonte
Eu adicionei a uma função no documento pronto. Se não houver botão de envio no formulário (todos os meus Formulários de Diálogo Jquery não possuem botões de envio), anexe-o.
fonte
fonte
Eu usei:
e:
no arquivo .css. Também funcionou magicamente para mim. :)
fonte