Formulário HTML e Confirmação de JavaScript
-
20-09-2019 - |
Pergunta
Estou tendo um problema em enviar um formulário e confirmação de JavaScript. Basicamente, o seguinte JavaScript é chamado quando o botão "Enviar" é pressionado.
function confirmation() {
var answer = confirm("Are you sure you wish to edit?")
if (answer)
{
window.location = "#editform2";
}
}
No entanto, quando bati no cancelamento em vez de OK, o JavaScript é executado corretamente, porque assisto à barra de endereços e não atualiza para #EditForm2. O formulário, no entanto, ainda envia. Parece atualizar a página. Aqui estão as partes relevantes do formulário:
//Form is encoded in PHP
<form method=\"post\">
//Form is in here
<input type=\"submit\" value=\"Edit\" onclick=\"confirmation()\">
Portanto, o formulário não sabe para onde está indo, apenas atualiza a página e a página também é o processador. Portanto, está processando, apesar de ter clicado em cancelamento e o JavaScript deve mantê -lo na mesma página. Além de mudar o processamento para uma página diferente, quais são minhas soluções?
Solução
Funciona assim porque é um botão Sumbit e o formulário é enviado em todos os casos. Atribua um ID ao formulário e altere o tipo de entrada:
<form method="post" id="formid">
<input type="button" value="Edit" onclick="confirmation()">
e chame essa função no clique:
function confirmation() {
var answer = confirm("Are you sure you wish to edit?")
if (answer)
{
document.getElementById("formid").submit();
}
}
Outras dicas
Não use o evento OnClick do botão Enviar, use o evento Onsubmit do seu formulário:
document.forms[0].onsubmit = function () {
return confirm("Are you sure you wish to edit?");
}
Você pode adicionar um atributo de identificação ao seu formulário para identificá -lo.
Manter a ligação do evento no código JavaScript; Não em atributos embutidos no seu HTML, torna seu código mais mantido e fácil de depurar.
tentar:
return answer;
No final da função e verifique se o método onclick retorna isso. Igual a:
<input type="submit" value="Edit" onclick="return confirmation()">
Isso tornaria a função retornar falsa e ter o formulário não ser publicado.