Pregunta

Estoy teniendo un problema con la presentación de un formulario de confirmación y Javascript. Básicamente, el siguiente Javascript se llama cuando "Enviar" se pulsa el botón.

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

Sin embargo, cuando pulso el botón Cancelar en vez del bien, el código JavaScript se ejecuta correctamente, porque observo la barra de direcciones y no se actualiza a # editform2. La forma, sin embargo, todavía se somete. Parece que actualizar la página. He aquí las partes pertinentes de la forma:

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

Así que la forma no sabe a dónde va, sólo se actualiza la página y la página pasa a ser el procesador también. Así que es procesado a pesar de que he hecho clic 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?

¿Fue útil?

Solución

Funciona así porque es un botón Sumbit y se envía el formulario en todos los casos. Asignar una ID a la forma y cambiar el tipo de entrada:

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

y llamar a esta función de clic:

function confirmation() {
    var answer = confirm("Are you sure you wish to edit?")
    if (answer)
    {
        document.getElementById("formid").submit();
    }
}

Otros consejos

No utilizar el evento onclick del botón de enviar, utilizar el evento onsubmit de su formulario:

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

Es posible que desee añadir un atributo id a su forma de identificarlo.

Mantener vinculante sobre el código JavaScript evento; no en atributos integrados en tu HTML, hace que el código sea más fácil de maintanable y depuración.

intento:

return answer;

al final de la función y asegúrese de que el método onclick vuelve este. De esta manera:

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

Esto haría que la función de retorno falsas y tienen la forma no será publicada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top