Eu tenho o seguinte javascript na minha página que não parece estar funcionando.
$('form').bind("keypress", function(e) {
if (e.keyCode == 13) {
e.preventDefault();
return false;
}
});
Gostaria de desativar o envio do formulário em enter, ou melhor ainda, para chamar meu envio de formulário ajax. Qualquer uma das soluções é aceitável, mas o código que estou incluindo acima não impede o envio do formulário.
javascript
jquery
forms
form-submit
Adam Levitt
fonte
fonte
Respostas:
Se
keyCode
não for pego, peguewhich
:EDIT: perdeu, é melhor usar em
keyup
vez dekeypress
EDIÇÃO 2: como em algumas versões mais recentes do Firefox o envio de formulários não é impedido, é mais seguro adicionar o evento de pressionamento de tecla ao formulário. Também não funciona (mais?), Apenas vinculando o evento ao formulário "nome", mas apenas ao ID do formulário. Portanto, tornei isso mais óbvio, alterando o exemplo de código adequadamente.
EDIT 3: Alterado
bind()
paraon()
fonte
e.which
, portanto você não precisa testare.keyCode
, mas +1 para a causa mais provável desse problema.return false;
disso?e.preventDefault();
parecekeyCode === 13 && !$(e.target).is('textarea')
Normalmente, o formulário é enviado Enterquando você se concentra nos elementos de entrada.
Podemos desativar a Enterchave (código
13
) nos elementos de entrada em um formulário:DEMO: http://jsfiddle.net/bnx96/325/
fonte
textareas
mesmo formulário. Usar em$("form input")
vez de$("form :input")
parece corrigi-lo. Demonstração: jsfiddle.net/bnx96/279Ainda mais curto:
fonte
function(e) {e.preventDefault();}
como valores de retorno nos manipuladores de eventos que foram descontinuados: stackoverflow.com/a/20045473/601386Enter
e não sobre a desativação do envio de formulários peloSubmit
botão.onClick
evento jQuery para validar um formulário e ainda enviar usando o jQuery. Em outras palavras, há casos em que você deseja enviar apenas via javascript / jQuery. Embora você ainda possa usar o AJAX com esta solução, ele desabilita a funcionalidade básica dosubmit
método.which
docs.fonte
Esta solução funciona em todos os formulários do site (também nos formulários inseridos com ajax), impedindo apenas a inserção de textos de entrada. Coloque-o em uma função pronta para documento e esqueça esse problema por toda a vida.
fonte
A maioria das respostas acima impedirá que os usuários adicionem novas linhas em um campo de área de texto. Se é algo que você deseja evitar, você pode excluir esse caso específico, verificando qual elemento atualmente tem foco:
fonte
O exagero de ter que capturar e testar cada pressionamento de tecla para a tecla ENTER realmente me incomoda, então minha solução depende do seguinte comportamento do navegador:
Pressionar ENTER disparará um evento de clique no botão enviar (testado no IE11, Chrome 38, FF 31) ** (ref: http://mattsnider.com/how-forms-submit-when-pressing-enter/ )
Portanto, minha solução é remover o botão de envio padrão (ou seja
<input type="submit">
) para que o comportamento acima falhe porque não há botão de envio para clicar magicamente quando pressionar ENTER. Em vez disso, eu uso um manipulador de cliques do jQuery em um botão regular para enviar o formulário pelo.submit()
método do jQuery .Demonstração: http://codepen.io/anon/pen/fxeyv?editors=101
** esse comportamento não é aplicável se o formulário tiver apenas 1 campo de entrada e esse campo for uma entrada de 'texto'; nesse caso, o formulário será enviado com a tecla ENTER, mesmo que nenhum botão de envio esteja presente na marcação HTML (por exemplo, um campo de pesquisa). Esse é o comportamento padrão do navegador desde os anos 90.
fonte
se você quiser apenas desativar o botão enviar e enviar, use o evento de envio do formulário
Você pode substituir "return false" pela chamada à função JS, que fará o que for necessário e também enviará o formulário como uma última etapa.
fonte
Você pode fazer isso perfeitamente em Javascript puro, simples e sem necessidade de biblioteca. Aqui está minha resposta detalhada para um tópico semelhante: Desabilitando a tecla Enter para Formulário
Em resumo, aqui está o código:
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.Não sei se você já resolveu esse problema ou se alguém está tentando resolver isso agora, mas aqui está a minha solução para isso!
fonte
A maneira simples é mudar o tipo de botão para botão - em html e adicionar evento em js ...
Mude a partir disso:
Para
E em js ou jquery adicione:
fonte
O código a seguir impedirá que a tecla Enter seja usada para enviar um formulário, mas ainda permitirá que você use a tecla Enter em uma área de texto. Você pode editá-lo ainda mais, dependendo de suas necessidades.
fonte
No firefox, quando você digita e pressiona enter, ele envia sua forma superior. A solução está no formulário de envio, adicione isto:
fonte
3 anos depois e nenhuma pessoa respondeu completamente a essa pergunta.
O solicitante deseja cancelar o envio do formulário padrão e chamar seu próprio Ajax. Esta é uma solicitação simples com uma solução simples. Não há necessidade de interceptar todos os caracteres inseridos em cada entrada.
Supondo que o formulário tenha um botão de envio, seja um
<button id="save-form">
ou um<input id="save-form" type="submit">
, faça:fonte
Ouvi dizer que
which
não é recomendado, então mude a resposta com a melhor classificação para isso.ref. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which
fonte
Quando o arquivo é concluído (carregamento concluído), o script detecta cada evento para a tecla "Entry" e ele desativa o evento para trás.
fonte
Solução completa em JavaScript para todos os navegadores
O código acima e a maioria das soluções são perfeitas. No entanto, acho que a mais curta "resposta curta", que está incompleta.
Então aqui está a resposta completa. em JavaScript com suporte nativo para o IE 7 também.
Agora, essa solução impedirá que o usuário envie usando a tecla Enter e não recarregará a página, nem o levará ao topo da página, se o formulário estiver em algum lugar abaixo.
fonte
Que tal agora:
Isso deve desativar todos os formulários com os botões de envio no seu aplicativo.
fonte