Javascript:onSubmit函数在函数完成之前提交表单?

时间:2012-01-14 12:26:22

标签: javascript html-form onsubmit

我问这个是因为我自己完全失去了,需要一双新鲜的眼睛。

在提交连接的HTML表单时成功调用以下JavaScript函数。函数启动并运行前两个if语句(如果返回false则暂停提交。)

然后,第一个测试alert“出现之前”然后表单提交,完全错过了函数的其余部分。在测试时我更改了最后一行以返回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 个答案:

答案 0 :(得分:1)

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内执行此操作(尽管我会尝试找到一种更加用户友好的方式来显示错误消息)。

将来,当您尝试调试代码时,可以使用trycatch来“捕获”Errors,如下所示:

try {
    if (false === AutoLength(_isbn)) {
        return false;
    }
} catch (e) {
    alert('AutoLength threw an error: '+e.message);
}

答案 1 :(得分:0)

如果运行时错误终止了函数的执行,则表单提交。因此,请查看脚本控制台日志以获取错误消息。