Jquery验证有条件电话美国

时间:2013-06-05 23:49:23

标签: internet-explorer jquery-validate

使用带有phoneUS方法的Jquery Validate插件。

下面的代码(条纹有点)可以在任何地方使用,除了IE当然是我的开发人员存在的祸根。

    <script type="text/javascript">
      jQuery(document).ready(function() {

    jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, ""); 
        return this.optional(element) || phone_number.length > 9 &&
            phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    }, "");

    jQuery("#myform").validate({
            rules: {
            EmailF: {
                required: true,
                email: true
        },

         PhoneF:{
            required: "#mycheck:checked",
            phoneUS: true

        },

            },

            messages: {
                 EmailF: " "
            },
 });
});

    </script>

基本上我有一个复选框(#mycheck),当选中时,需要验证PhoneF字段。如果未选中,则无需进行验证。

正如前面提到的工作FF,Chrome,Safari甚至在iPhone上但IE无法绕过这个条件。

我尝试了几种不同的方法,将所需的字段转换为函数,以检查IE是否检查了复选框是不是很好。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您还没有提到哪个版本的Explorer会给您带来麻烦,但您可以尝试以下一个或多个方法来使您的依赖方法正常工作......

1)旧版本的资源管理器会在尾随逗号上窒息。为了安全起见,从代码中删除两个尾随逗号。

rules: {
    EmailF: {
        required: true,
        email: true
    },
    PhoneF: {
        required: "#mycheck:checked",
        phoneUS: true
    }, // <-- REMOVE this comma
},
messages: {
    EmailF: " "
}, // <-- REMOVE this comma

2)此代码是另一种编写依赖关系规则的方法...

PhoneF: {
    required: function(element) {
        return jQuery('#mycheck').is(':checked');
    },
    phoneUS: true
}

DEMO:http://jsfiddle.net/TBCPM/

3)使用depends子规则也是一种有效的方法......

PhoneF: {
    required: {
        depends: function(element) {
            return jQuery('#mycheck').is(':checked');
        }
    },
    phoneUS: true
}

DEMO:http://jsfiddle.net/UutTk/

答案 1 :(得分:0)

如果我可以建议..

将“(x \ d {1,4})”添加到扩展名的匹配中:1(999)999-9999 x123

应该像 - ?\ d {4}(| x \ d {1,4})$ /

那样结束