Javascript: функция onSubmit отправляет форму до завершения функции? - PullRequest
3 голосов
/ 14 января 2012

Я спрашиваю об этом, потому что я в полной растерянности и мне нужна свежая пара глаз.

Следующая функция JavaScript успешно вызывается при отправке подключенной HTML-формы.Функция запускается и запускаются первые два оператора if (и прекращают отправку, если они возвращают false).

Затем появляется первый тест alert "before" и затем форма отправляется полностьюупустив остальную часть функции.Во время тестирования я изменил последнюю строку, чтобы она возвращала false, чтобы в любом случае функция возвращала false, но форма все еще отправлялась.

function validateForm(form)
{
    // declare variables linked to the form
    var _isbn = auto.isbn.value;
    var _idisplay = auto.isbn.title;
    var _iref = "1234567890X";
    // call empty string function
    if (EmptyString(_isbn,_idisplay)==false) return false;
    // call check against reference function
    if (AgainstRef(_isbn,_iref,_idisplay)==false) return false;
    // call check length function
    alert("before");///test alert

    ////// FORM SUBMITS HERE?!? /////////////

    if (AutoLength(_isbn)==false) return false;
    alert("after");///test alert
    // if all conditions have been met allow the form to be submitted
    return true;
}

Редактировать: это то, что AutoLengthвыглядит так:

function AutoLength(_isbn) {
    if (_isbn.length == 13) {
        return true; {
    else {
        if (_isbn.length == 10) {
            return true; {
        else {
            alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
            return false;
        }
    }

Ответы [ 2 ]

1 голос
/ 14 января 2012

В вашей реализации AutoLength есть ошибки.В настоящее время это выглядит так:

function AutoLength(_isbn) {
    if (_isbn.length == 13) {
        return true; { // <------ incorrect brace
    else {
        if (_isbn.length == 10) {
            return true; { // <------ incorrect brace
        else {
            alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
            return false;
        }
    }

Посмотрите, как он не закрывает все свои блоки?Это потому, что вы использовали неправильную скобку в двух местах, и вы забыли закрыть функцию.

Вы можете переписать функцию следующим образом:

function AutoLength(_isbn) {
    return _isbn.length === 13  || _isbn.length === 10;
}

Если выодержимый использованием alert, вы можете сделать это внутри validateForm (хотя я постараюсь найти более удобный способ показать сообщение об ошибке).

В будущем, когда вы 'пытаясь отладить код, вы можете использовать try и catch, чтобы «поймать» Errors, как они происходят, например:

try {
    if (false === AutoLength(_isbn)) {
        return false;
    }
} catch (e) {
    alert('AutoLength threw an error: '+e.message);
}
0 голосов
/ 14 января 2012

Если выполнение функции прекращается из-за ошибки времени выполнения, форма отправляется. Так что проверьте журнал консоли скрипта на наличие сообщений об ошибках.

...