Почему моя функция onsubmit завершает работу раньше времени и не возвращает false?

StackOverflow https://stackoverflow.com/questions/2074455

  •  20-09-2019
  •  | 
  •  

Вопрос

<form method="post" action="/Order/CheckOut/" onSubmit="return Validate()">

а потом...

function Validate() {
    alert($("#email").val());
    return false;
}

Проблема в том, что когда я удаляю предупреждение, оно работает нормально, отправка не удалась, но когда я вставляю предупреждение, оно позволяет отправке пройти...какого черта?

Я также попробовал это:

function Validate() {
    if(document.getElementByID("email").value == "test"){
        alert("It says test.");
    }
    return false;
}

и получил такое же поведение, он никогда не дошел до оператора возврата...

Если я прохожу через JS с помощью firebug и прерываю предупреждение или if (в зависимости от версии выше), он останавливается на этом, и я нажимаю «шаг в», и он просто отправляет форму, почему он не доходит до вернуть ложную строку?

Это было полезно?

Решение

Почему бы не обернуть его в блок try?

function Validate() {
    try {
        alert($("#email").val());
    } catch (e) {
        alert("Problem: " + e);
    }

    return false;
}

Другие советы

Вы могли бы использовать event.preventDefault() вместо.

$("form[name='myForm']").submit(function(e){
  e.preventDefault();
  alert($("#email").val());
});

Вам следует попытаться сохранить JavaScript, CSS и HTML отдельно.Не интегрируйте их, иначе вы затрудните управление проектом.Вместо использования onsubmit атрибут в HTML, просто добавьте свою логику в атрибут $.submit() метод формы из вашего JavaScript, как я сделал выше.

Этот пример предполагает, что вы дали своей форме имя «MyForm». Я просто использовал это в примере, как вы должны использовать, какую форму вы обрабатываете, и не используете общий $("form") селектор.

Если вы уже используете jQuery, значит, вы изначально все делаете неправильно.Вам не следует вручную указывать onSubmit обработчик изнутри <form> элемент.Сделайте, как предложил @Jon, и просто привяжите событие отправки:

$("form").submit(function() {
    alert($("#email").val());
    return false;
});

Проблема не в том, что ваша функция возвращает true.Проблема в том, что JavaScript в оповещении дает сбой, и JavaScript перестает интерпретировать код.В этот момент браузер продолжает выполнение действия по умолчанию — отправку формы.

Вот почему Джонатан Сэмпсон предлагает использовать e.preventDefault() перед alert(). Таким образом, браузер не продолжит поведение по умолчанию в случае сбоя alert().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top