Tengo un problema al enviar un formulario y la confirmación de Javascript. Básicamente, se llama al siguiente Javascript cuando se presiona el botón "enviar".

function confirmation() {
    var answer = confirm("Are you sure you wish to edit?")
    if (answer)
    {
        window.location = "#editform2";
    }
}

Sin embargo, cuando presiono cancelar en lugar de aceptar, el Javascript se ejecuta correctamente, porque miro la barra de direcciones y no se actualiza a # editform2. El formulario, sin embargo, aún se presenta. Parece actualizar la página. Aquí están las partes relevantes del formulario:

//Form is encoded in PHP
<form method=\"post\">
//Form is in here
<input type=\"submit\" value=\"Edit\" onclick=\"confirmation()\">

Por lo tanto, el formulario no sabe a dónde va, simplemente actualiza la página y la página también es el procesador. Por lo tanto, se está procesando a pesar de que hice clic en cancelar y el Javascript debería mantenerlo en la misma página. Además de mover el procesamiento a una página diferente, ¿cuáles son mis soluciones?

4
waiwai933 31 ago. 2009 a las 11:51

3 respuestas

La mejor respuesta

Funciona así porque es un botón de envío y el formulario se envía en todos los casos. Asigne una identificación al formulario y cambie el tipo de entrada:

<form method="post" id="formid">
<input type="button" value="Edit" onclick="confirmation()">

Y llame a esta función al hacer clic:

function confirmation() {
    var answer = confirm("Are you sure you wish to edit?")
    if (answer)
    {
        document.getElementById("formid").submit();
    }
}
6
mck89 31 ago. 2009 a las 07:56

Tratar:

return answer;

Al final de la función y asegúrese de que el método onclick devuelva esto. Al igual que:

<input type="submit" value="Edit" onclick="return confirmation()">

Esto haría que la función devuelva falso y no se publique el formulario.

1
Robban 31 ago. 2009 a las 09:34

No use el evento onclick del botón de envío, use el evento de envío de su formulario:

document.forms[0].onsubmit = function () {
    return confirm("Are you sure you wish to edit?");
}

Es posible que desee agregar un atributo de identificación a su formulario para identificarlo.

Mantener el enlace de eventos en el código JavaScript; no en los atributos en línea en su HTML, hace que su código sea más fácil de mantener y fácil de depurar.

4
CMS 31 ago. 2009 a las 08:13