为什么我的邮政编码验证方法无法正常工作

时间:2016-10-14 15:10:08

标签: javascript validation

我有一个使用asp:requiredvalidator和一些自定义javascript的表单,可以在任何未正确填写的字段周围应用红色1px边框。

这很有效,但现在我希望能够在用户正确填写字段时立即删除红色边框。

为了实现这一点,我使用Jquery的focusout()方法将用户输入与正则表达式进行比较。到目前为止,除了邮政编码之外,我还能正确地处理每个领域(包括电子邮件验证)。出于某种原因,我编写的所有验证方法都完美地工作,除了邮政编码。

这是一个有效的电子邮件验证,例如

        if (id == "email1" || id == "email2") {
            emailValue = e.target.value;
            if (validateEmail(emailValue)) {
                $("#" + id).removeClass("ErrorControl");
            }
            else {

            }
        }

        function validateEmail(email) {
            var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
            return re.test(email);
        }

一旦场失去焦点且电子邮件有效,此功能完美无缺并删除红色边框。

但我无法让我的zip验证器工作,即使它的工作方式几乎完全相同。

这是非工作的拉链示例

            //Zip code also require special validation to confirm
            if (id == "zip") {
                zipValue = e.target.value;
                if (validateZip(zipValue)) {
                    $("#" + id).removeClass("ErrorControl")
                }
            }

        //Simple zip validator
        function validateZip(zip) {
            var re = /^[0-9]{5}$/;
            return re.test(zip);
        }

不幸的是,这仍然会删除红色边框,即使我只输入字母!为什么会这样?

https://jsfiddle.net/hhjvstp3/

我已经给了电子邮件和zip一类ErrorControl,因为我无法在jsfiddle上运行asp验证器。这与我描述的完全一样。电子邮件验证良好,邮政编码无论如何都会删除边框。

1 个答案:

答案 0 :(得分:0)

Updated fiddle

您可以看到哪行从zip

中删除了ErrorControl类
 if (id == "firstname" || id == "lastname" || id == "address1" || id == "city" || id == "amount") { 
    //id == "zip" shouldn't be here
     if (e.target.value != "") {
          $("#" + id).removeClass("ErrorControl");
      }
 }