【问题标题】:How do I correctly perform form validation in JavaScript?如何在 JavaScript 中正确执行表单验证?
【发布时间】:2014-03-09 07:48:06
【问题描述】:

我很难尝试进行正确的表单验证。我有姓名、电子邮件和电话号码字段。我对所有这些都实施了验证检查,当我单击提交查询时,它返回电子邮件为假,但没有其他任何东西。它也仍将提交表单。我该如何解决这个问题?

JSFiddle:http://jsfiddle.net/GVQpL/

JavaScript 代码:

function validateForm(/*fullName, email, phoneNumber*/)
{
    //-------------------------NAME VALIDATION-----------------------------//
    var fullNameV = document.forms["queryForm"]["fullName"].value;
    if (fullNameV == null || fullNameV == "")
    {
        alert("Name must be filled out!");
        return false;
    }
    else if(fullNameV.indexOf(" ") <= fullNameV.length)
    {
        alert("Not a valid name");
        return false;
    }

    //-------------------------EMAIL VALIDATION-----------------------------//
    var emailV = document.forms["queryForm"]["email"].value;
    if (emailV == null || emailV == "")
    {
         alert("Email must be filled out!");
         return false;
    }
    var atpos = emailV.indexOf("@");
    var dotpos = emailV.lastIndexOf(".");
    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
    {
        alert("Not a valid e-mail address");
        return false;
    }

    //-------------------------PHONE # VALIDATION-----------------------------//
    var phoneNumberV = document.forms["queryForm"]["phoneNumber"].value;
    if (phoneNumberV == null || phoneNumberV == "")
    {
        alert("Phone Number must be filled out!");
        return false;
    }
    var error = "";
    var stripped = phoneNumberV.replace(/[\(\)\.\-\ ]/g, '');    

    if (phoneNumberV == "") 
    {
        error = alert("You didn't enter a phone number.\n");
        phoneNumberV.style.background = 'Yellow';
    } 
    else if (isNaN(parseInt(stripped))) 
    {
        error = alert("The phone number contains illegal characters.\n");
        phoneNumberV.style.background = 'Yellow';
    } 
    else if (!(stripped.length == 10)) 
    {
        error = alert("The phone number is the wrong length. Make sure you included an area code.\n");
        phoneNumberV.style.background = 'Yellow';
    }
    return error;
}

【问题讨论】:

  • 对于一个alert 不返回值,因此将其保存到error 是没有意义的
  • @PatrickEvans - 同意,但这就是您从中获得的低效率?这里有很大的改进空间。
  • @PlantTheIdea,不,这只是我看到的第一件事,而且这是评论部分,并不是列出所有可以改进的地方。
  • @PatrickEvans - 触摸,先生。触摸。

标签: javascript html forms validation


【解决方案1】:

更新你的小提琴的 html 来调用 onsubmit="return validateForm()" 并删除 required="required" 改变你的函数来工作,你可以在这里看到它:

http://jsfiddle.net/GVQpL/3/

        function validateForm(/*fullName, email, phoneNumber*/)
        {
            //-------------------------NAME VALIDATION-----------------------------//
            var fullNameV = document.forms["queryForm"]["fullName"].value;
            if (fullNameV == null || fullNameV == "")
            {
                alert("Name must be filled out!");
                document.forms["queryForm"]["fullName"].focus();
                return false;
            }
            else if(fullNameV.indexOf(" ") >= fullNameV.length)
            {
                alert("Not a valid name");
                document.forms["queryForm"]["fullName"].focus();
                return false;
            }

            //-------------------------EMAIL VALIDATION-----------------------------//
            var emailV = document.forms["queryForm"]["email"].value;
            if (emailV == null || emailV == "")
            {
                alert("Email must be filled out!");
                document.forms["queryForm"]["email"].focus();
                return false;
            }

            var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if(!emailReg.test(emailV)){

                alert("Not a valid e-mail address");
                document.forms["queryForm"]["email"].focus();
                return false;
            }

            //-------------------------PHONE # VALIDATION-----------------------------//
            var phoneNumberV = document.forms["queryForm"]["phoneNumber"].value;
            if (phoneNumberV == null || phoneNumberV == "")
            {
                alert("Phone Number must be filled out!");
                document.forms["queryForm"]["phoneNumber"].focus();
                return false;
            }
            var error = "";
            var stripped = phoneNumberV.replace(/[\(\)\.\-\ ]/g, '');    

            if (phoneNumberV == "") 
            {
                alert("You didn't enter a phone number.\n");
                document.forms["queryForm"]["phoneNumber"].focus()
                document.forms["queryForm"]["phoneNumber"].style.background = 'Yellow';
                return false;
            } 
            else if (isNaN(parseInt(stripped))) 
            {
             alert("The phone number contains illegal characters.\n");
                document.forms["queryForm"]["phoneNumber"].focus();
                document.forms["queryForm"]["phoneNumber"].style.background = 'Yellow';
                return false;
            } 
            else if (!(stripped.length == 10)) 
            {
                alert("The phone number is the wrong length. Make sure you included an area code.\n");
                document.forms["queryForm"]["phoneNumber"].focus();
                document.forms["queryForm"]["phoneNumber"].style.background = 'Yellow';
                return false;
            }
            if(!confirm('Are you sure you want to submit your DSLR query?')){
                return false;   
            }
            return true;
        }

【讨论】:

  • 谢谢!我现在更接近了,但最后仍然有一个问题,提交按钮不执行任何操作或被假定返回 false。表单验证返回 true,但 queryForm.onsubmit function() 不会显示成功提交查询的消息。这是 jsfiddle:jsfiddle.net/GVQpL/2
  • @TheAmazingKnight 更新代码,函数存在问题,在所有情况下都错误地返回 false。而且你不需要把东西弄复杂,只要在所有测试通过后在函数末尾添加确认提示,检查新的小提琴
  • 好的,我更新了我的代码并按照你说的做了,但是当我点击提交按钮时它仍然没有做任何事情。 jsfiddle.net/GVQpL/4
  • 首先你不需要这个:queryForm.onsubmit = function(){ 因为你已经在提交时调用的函数中。而且你不需要这个:if(!nameValid || !emailValid || !phoneNumberValid){ return valid = false;},因为你在每个没有通过的测试中都返回 false。你不需要return x=false; 只需return false; 签出:jsfiddle.net/GVQpL/5 更新了你的最终代码
  • 哦,我现在看到了问题!非常感谢您修复它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多