HTML-форма и подтверждение Javascript

У меня проблема с отправкой формы и подтверждением Javascript. По сути, следующий Javascript вызывается при нажатии кнопки «Отправить».

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

Однако, когда я нажимаю «Отмена» вместо «ОК», Javascript выполняется правильно, потому что я смотрю на адресную строку, и она не обновляется до #editform2. Форма, однако, по-прежнему отправляется. Вроде обновил страницу. Вот соответствующие части формы:

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

Таким образом, форма не знает, куда она идет, она просто обновляет страницу, а страница также является процессором. Таким образом, он обрабатывается, хотя я нажал «Отмена», и Javascript должен оставить его на той же странице. Какие у меня есть решения, кроме переноса обработки на другую страницу?


person waiwai933    schedule 31.08.2009    source источник


Ответы (3)


Это работает так, потому что это кнопка sumbit, и форма отправляется в каждом случае. Назначьте идентификатор форме и измените тип ввода:

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

и вызовите эту функцию по клику:

function confirmation() {
    var answer = confirm("Are you sure you wish to edit?")
    if (answer)
    {
        document.getElementById("formid").submit();
    }
}
person mck89    schedule 31.08.2009
comment
Форма не отправляется в каждом случае, если метод возвращает false, форма не будет отправлена... - person Robban; 31.08.2009

Не используйте событие onclick кнопки отправки, используйте событие onsubmit вашей формы:

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

Вы можете добавить в форму атрибут id, чтобы идентифицировать ее.

Сохранение привязки событий к коду JavaScript; не во встроенных атрибутах в вашем HTML, делает ваш код более удобным в обслуживании и легким для отладки.

person Christian C. Salvadó    schedule 31.08.2009
comment
+1, но document.forms[0] не очень удобное решение для обслуживания. Было бы лучше дать форме имя или идентификатор. - person nickf; 31.08.2009
comment
Согласен, спасибо, это было только для примера, поэтому и предлагаю добавить id... - person Christian C. Salvadó; 31.08.2009

пытаться:

return answer;

в конце функции и убедитесь, что метод onclick возвращает это. Вот так:

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

Это приведет к тому, что функция вернет false и форма не будет опубликована.

person Robban    schedule 31.08.2009