Como você evita que um ENTERpressionamento de tecla envie um formulário em um aplicativo baseado na Web?
javascript
events
user67722
fonte
fonte
Aqui está um manipulador de jQuery que pode ser usado para parar de enviar envios e também para parar a tecla de retrocesso -> voltar. Os pares (keyCode: selectorString) no objeto "keyStop" são usados para corresponder aos nós que não devem disparar sua ação padrão.
Lembre-se de que a web deve ser um local acessível, e isso está quebrando as expectativas dos usuários de teclado. Dito isto, no meu caso, o aplicativo da Web em que estou trabalhando não gosta do botão voltar, de modo que desativar o atalho de tecla é OK. A discussão "deve entrar -> enviar" é importante, mas não está relacionada à pergunta real.
Aqui está o código, você decide sobre acessibilidade e por que realmente deseja fazer isso!
fonte
Simplesmente retorne false do manipulador de envio
ou se você quiser um manipulador no meio
fonte
submit
botão<form>
de ficar submetido em tudo é deitar fora o bebé com a água do banho.fonte
e.preventDefault()
em vez dereturn false
atingir o mesmo fim, mas permitir que o evento alcance manipuladores nos elementos pai. A ação padrão (summission do formulário) ainda será impedidaVocê precisará chamar essa função, que cancelará o comportamento de envio padrão do formulário. Você pode anexá-lo a qualquer campo ou evento de entrada.
fonte
A tecla ENTER apenas ativa o botão de envio padrão do formulário, que será o primeiro
o navegador encontra no formulário.
Portanto, não tem um botão de envio, mas algo como
EDIT : Em resposta à discussão nos comentários:
Isso não funciona se você tiver apenas um campo de texto - mas pode ser o comportamento desejado nesse caso.
A outra questão é que isso depende do Javascript para enviar o formulário. Isso pode ser um problema do ponto de vista da acessibilidade. Isso pode ser resolvido escrevendo o
<input type='button'/>
com javascript e, em seguida, coloque um<input type='submit' />
dentro de uma<noscript>
tag. A desvantagem dessa abordagem é que, para navegadores desativados em javascript, você terá envios de formulário em ENTER. Cabe ao OP decidir qual é o comportamento desejado nesse caso.Não conheço nenhuma maneira de fazer isso sem chamar o javascript.
fonte
Em suma, a resposta em Javascript puro é:
Isso desativa apenas a ação de pressionar a tecla "Enter" para o tipo de entrada = 'texto'. Os visitantes ainda podem usar a tecla "Enter" em todo o site.
Veja minha resposta detalhada para uma pergunta semelhante aqui
fonte
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Com o código especificado, será possível enviar formulários se um rádio ou caixa de seleção estiver focada.Todas as respostas que encontrei sobre esse assunto, aqui ou em outros posts, têm uma desvantagem e evitam o gatilho de alteração real no elemento do formulário. Portanto, se você executar essas soluções, o evento onchange também não será acionado. Para superar esse problema, modifiquei esses códigos e desenvolvi o código a seguir. Espero que isso se torne útil para os outros. Eu dei uma aula ao meu formulário "prevent_auto_submit" e adicionei o seguinte JavaScript:
fonte
Eu sempre fiz isso com um manipulador de teclas como o anterior, mas hoje encontrei uma solução mais simples. A tecla Enter apenas aciona o primeiro botão de envio não desativado no formulário. Portanto, na verdade, tudo o que é necessário é interceptar esse botão tentando enviar:
É isso aí. As teclas pressionadas serão tratadas como de costume pelo navegador / campos / etc. Se a lógica de envio e entrada for acionada, o navegador encontrará o botão de envio oculto e o acionará. E o manipulador de javascript impedirá o envio.
fonte
hidden
na entrada seria mais curto. nice hack :)Passei algum tempo criando esse navegador para IE8,9,10, Opera 9+, Firefox 23, Safari (PC) e Safari (MAC)
Exemplo do JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/
Código base - chame essa função via "onkeypress" anexado ao seu formulário e passe "window.event" para ele.
fonte
Em seguida, no seu formulário:
No entanto, seria melhor se você não usasse JavaScript invasivo.
fonte
charCode
. Também mudei oreturn false
interior do bloco if. Boa pegada.No meu caso, esse JavaScript jQuery resolveu o problema
fonte
<input>
campos no formulário?Impedir que "ENTER" envie o formulário pode incomodar alguns de seus usuários. Portanto, seria melhor se você seguir o procedimento abaixo:
Escreva o evento 'onSubmit' em sua tag de formulário:
escreva a função Javascript da seguinte maneira:
Seja qual for o motivo, se você deseja impedir o envio do formulário ao pressionar a tecla Enter, é possível escrever a seguinte função em javascript:
obrigado.
fonte
Adicione esta tag ao seu formulário -
onsubmit="return false;"
você poderá enviar seu formulário apenas com alguma função JavaScript.fonte
Para impedir o envio do formulário ao pressionar enterum campo
textarea
ouinput
, verifique o evento de envio para descobrir que tipo de elemento enviou o evento.Exemplo 1
HTML
jQuery
Uma solução melhor é se você não tiver um botão de envio e disparar o evento com um botão normal. É melhor porque, no primeiro exemplo, 2 eventos de envio são disparados, mas no segundo exemplo, apenas 1 evento de envio é disparado.
Exemplo 2
HTML
jQuery
fonte
Você achará isso mais simples e útil: D
fonte
E se:
fonte
Por favor, verifique este artigo Como impedir que a tecla ENTER seja pressionada para enviar um formulário da web?
fonte
Você pode capturar a tecla pressionada em um formulário em javascript e impedir que borbulhe, acho. ENTER em uma página da Web basicamente envia o formulário em que o controle atualmente selecionado é colocado.
fonte
Este link fornece uma solução que funcionou para mim no Chrome, FF e IE9, além do emulador para o IE7 e 8 que vem com a ferramenta de desenvolvimento do IE9 (F12).
http://webcheatsheet.com/javascript/disable_enter_key.php
fonte
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Outra abordagem é anexar o botão de entrada de envio ao formulário somente quando ele deve ser enviado e substituí-lo por uma div simples durante o preenchimento do formulário
fonte
Basta adicionar este atributo à sua tag FORM:
Em seguida, na sua tag SCRIPT, adicione este:
Então, quando você pressiona um botão ou por qualquer outro motivo (como em uma função), você finalmente permite o envio, basta virar o booleano global e fazer uma chamada .submit (), semelhante a este exemplo:
fonte
Eu já me deparei com isso porque tenho vários botões de envio com valores diferentes de 'nome', para que, quando enviados, façam coisas diferentes no mesmo arquivo php. O botão
enter
/return
quebra isso, pois esses valores não são enviados. Então, eu estava pensando: o botãoenter
/return
ativa o primeiro botão de envio no formulário? Dessa forma, você pode ter um botão de envio 'baunilha' que está oculto ou tem um valor de 'nome' que retorna o arquivo php em execução de volta à página com o formulário. Ou então, um valor padrão (oculto) de 'nome' que a tecla pressionada ativa e os botões de envio sobrescrevem com seus próprios valores de 'nome'. Apenas um pensamento.fonte
E se:
E apenas nomeie seu botão à direita e ele ainda será enviado, mas os campos de texto, isto é, o explícitoOriginalTarget quando você clicar em retornar em um, não terão o nome correto.
fonte
Isso funcionou para mim.
onkeydown = "return! (event.keyCode == 13)"
fonte
Aqui está como eu faria isso:
fonte
colocar em arquivo externo javascript
ou em algum lugar dentro da etiqueta corporal
fonte
Eu tive o mesmo problema (formulários com muitos campos de texto e usuários não qualificados).
Eu resolvi desta maneira:
usando isso no código HTML:
Dessa maneira, a
ENTER
tecla funciona como planejado, masENTER
é necessária uma confirmação ( geralmente um segundo toque).Deixo para os leitores a busca de um script enviando o usuário no campo em que ele pressionou
ENTER
se ele decidir permanecer no formulário.fonte