Почему моя функция onsubmit завершает работу раньше и не возвращает false? - PullRequest
0 голосов
/ 15 января 2010
<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;
}

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

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

Ответы [ 4 ]

2 голосов
/ 15 января 2010

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

$("form").submit(function() {
    alert($("#email").val());
    return false;
});
2 голосов
/ 15 января 2010

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

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

    return false;
}
2 голосов
/ 15 января 2010

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

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

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

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

1 голос
/ 16 января 2010

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

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

...