2014-10-22 57 views
0

所以,我有我的形式设置这样的:防止形式的onsubmit

<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; 
} 

在此先感谢!

+0

@OJay现在它没有进入window.location.href部分,但验证工作完美,谢谢 – Drew 2014-10-22 02:24:04

+0

感谢@OJay - 工作 - 如果你张贴它作为答案 - 我会选择它作为正确的! – Drew 2014-10-22 02:42:05

回答

0

首先,虽然你的函数正确返回true或false取决于你的需求,你是不是将其返回到onsubmit,所以你的形式的onsubmit应该读

onsubmit="return validate(this)" 

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

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