Eu tenho um formulário que possui um botão de envio em algum lugar.
No entanto, gostaria de "capturar" o evento de envio e impedir que ele ocorra.
Existe alguma maneira de fazer isso?
Não consigo modificar o botão enviar, porque faz parte de um controle personalizado.
javascript
html
forms
Nathan Osman
fonte
fonte
Respostas:
Diferentemente das outras respostas, o retorno
false
é apenas parte da resposta. Considere o cenário em que um erro JS ocorre antes da instrução de retorno ...html
roteiro
retornar
false
aqui não será executado e o formulário será enviado de qualquer maneira. Você também deve ligarpreventDefault
para impedir a ação de formulário padrão para envios de formulário do Ajax.Nesse caso, mesmo com o bug, o formulário não será enviado!
Alternativamente, um
try...catch
bloco pode ser usado.fonte
false
diretamente deonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
Caso contrário, ocorrerá um erro indefinido.Você pode usar um evento embutido
onsubmit
como esteOu
Demo
Agora, isso pode não ser uma boa ideia ao fazer grandes projetos. Pode ser necessário usar ouvintes de eventos.
Por favor, leia mais sobre inline Eventos vs Ouvintes de eventos (addEventListener e attachEvent do IE) aqui . Pois não posso explicar mais do que Chris Baker .
fonte
<form onsubmit="return false;" >
não funciona para mim.Anexe um ouvinte de evento ao formulário usando
.addEventListener()
e chame o.preventDefault()
método emevent
:Eu acho que é uma solução melhor do que definir um
submit
manipulador de eventos alinhado com oonsubmit
atributo porque ele separa a lógica e a estrutura da página da web. É muito mais fácil manter um projeto em que a lógica é separada do HTML. Consulte: JavaScript discreto .Usar a
.onsubmit
propriedade doform
objeto DOM não é uma boa ideia, pois impede que você anexe vários retornos de chamada de envio a um elemento. Veja addEventListener vs onclick .fonte
$("button").click(function(e) { e.preventDefault() });
Tente este...
Código HTML
Código jQuery
ou
fonte
stopPropagation
foi a única coisa que funcionou no meu caso. obrigado! :)A seguir, funciona a partir de agora (testado no chrome e no firefox):
onde validateMyForm () é uma função que retorna
false
se a validação falhar. O ponto principal é usar o nomeevent
. Não podemos usar por exemploe.preventDefault()
fonte
fonte
.onsubmit
é uma péssima idéia porque impede você de anexar váriossubmit
retornos de chamada a um elemento. Eu recomendo usar.addEventListener()
.Para seguir convenções de programação JavaScript discretas e, dependendo da rapidez com que o DOM será carregado, pode ser uma boa ideia usar o seguinte:
Em seguida, conecte eventos usando o onload ou o DOM pronto, se você estiver usando uma biblioteca.
Além disso, eu sempre usaria o
action
atributo, pois algumas pessoas podem ter algum plug-in como o NoScript em execução, que quebraria a validação. Se você estiver usando o atributo action, no mínimo, seu usuário será redirecionado pelo servidor com base na validação de back-end. Se você estiver usando algo comowindow.location
, por outro lado, as coisas serão ruins.fonte
Para impedir o envio do formulário, você só precisa fazer isso.
Ao usar o código acima, isso impedirá o envio do seu formulário.
fonte
Aqui está a minha resposta:
Eu adicionar
event.preventDefault();
emonsubmit
e ele funciona.fonte
Você pode adicionar eventListner ao formulário that
preventDefault()
e converter os dados do formulário em JSON como abaixo:fonte