使用Javascript onsubmit阻止提交表单并保留数据

时间:2014-10-22 02:03:56

标签: javascript forms

所以我的表单设置如下:

<form id="form" name='form' method="post" action="#" onsubmit="validate(this)">

我有以下函数来验证表单,但问题是,当验证失败时,表单会重置,因此您必须重新键入所有信息。虽然从我所读过的内容中得到的回报是虚假的;在验证功能中应该防止这种情况,那么我做错了什么?

var error = false;
var errors = [];

function validate(form)
{
    var name = form.inputname.value;
    var phone = form.inputphone.value;
    var email = form.inputemail.value;
    var make = form.inputmake.value;
    var model = form.inputmodel.value;
    var month = form.month.value;
    var day = form.day.value;

    if(!name || !phone || !email || !make || !model || !day || !month)
    {
        alert("Please complete the form");
        errors[errors.length] = "Incomplete Form\n";
        return false;
    }
    if (month < 1 || month > 12 || day < 1 || day > 30) {
        alert("Please enter valid Month/Day in format 1-12/1-30 ");
        document.getElementById("month").focus();
        errors[errors.length] = "Invalid Date\n";
        return false;
    }

    if (errors.length > 0) {
        alert(errors);
        return false;
    }
    else if (errors.length == 0)
    {
        window.location.href("reserved300771292.aspx");
    }
    return true;
}

提前致谢!!

1 个答案:

答案 0 :(得分:0)

首先,虽然您的函数根据您的要求正确返回true或false,但您不会将其返回onsubmit,因此您的表单onsubmit应该读取

onsubmit="return validate(this)"

其次,由于errors[]是全球性的,您可能会遇到一个有趣的错误。如果第一个表单验证失败,那么每个后续表单提交也将失败(即使它是有效的),因为您没有清除errors数组。在errors[]函数中声明validate变量。

此外,我不确定您将在验证功能中重定向浏览器的确切行为。这可能会阻止表单提交(即表单上收集的数据不会被发布)或重定向不起作用。我个人不会尝试这种方法,如果一切按预期的方式在服务器端重定向,因为验证服务器端和客户端是最佳做法