【问题标题】:jquery validate plug and ignore (JavaScript and jquery newbie)jquery 验证即插即用(JavaScript 和 jquery 新手)
【发布时间】:2011-09-17 00:14:59
【问题描述】:

有没有办法让var ignoreClasses 变成.validate()

$(document).ready(function(){

var ignoreClasses="";

//this hides or shows the specific sections base ond the relationship select
$("#relationship").change(function() {
    switch ($(this).val()){

        case 'prospective-customer':
            $(".interest_all").hide();
            $("#interest_1").show();
            ignoreClasses = '.s2,.s4,.s5';
        break;
        case 'current-cutomer':
            $(".interest_all").hide();
            $("#interest_2").show();
            ignoreClasses = '.s1,.s4,.s5';
        break;
        case 'prospective-partner': 
            $(".interest_all").hide();              
            $("#interest_3").show();
        break;
        case 'applicant':
            $(".interest_all").hide();          
            $("#interest_4").show();
            ignoreClasses = '.s1,.s2,.s5';
        break;  
        case 'vendor':          
            $(".interest_all").hide();          
            $("#interest_5").show();
            ignoreClasses = '.s1,.s2,.s4';
        break;  
                                        
        default:
            $(".interest_all").hide();
        }   
});

// field validation
$("#leadform").validate({

     //I need to get the ignore class in here
    //like ignore: '.s2,.s4,.s5'


});

});

此外,整个表单验证仅在用户更改#Relationship 选择框时才有效。如果用户只是填写了他们的姓名,那么点击提交表单根本不会被验证。

【问题讨论】:

  • 将 var 放入 .validate() 是什么意思?

标签: jquery validation


【解决方案1】:

$("#leadform").validate({ ignore: ignoreClasses});

您将一个对象传递给validate method,因此您必须使用 JSON 语法。

另外,我建议您缓存 jQuery 选择器以获得更好的性能(在这种情况下并不重要,但这是一个很好的做法)。

http://jsfiddle.net/jondum/Tua6c/

【讨论】:

    【解决方案2】:

    如果您希望.validation() 与您在change 事件侦听器中指定的ignoreClasses 一起运行,您必须从事件侦听器中调用.validation() 方法。事实上,ignoreClasses 不会在 .validate() 运行时定义。

    $(document).ready(function() {
    
        var ignoreClasses = "";
    
        var $interests_all = $(".interest_all");
    
        //this hides or shows the specific sections base ond the relationship select
        $("#relationship").change(function() {
            switch (this.value) {
    
            case 'prospective-customer':
                $interests_all.hide();
                $("#interest_1").show();
                ignoreClasses = '.s2,.s4,.s5';
                break;
            case 'current-cutomer':
                $interests_all.hide();
                $("#interest_2").show();
                ignoreClasses = '.s1,.s4,.s5';
                break;
            case 'prospective-partner':
                $interests_all.hide();
                $("#interest_3").show();
                break;
            case 'applicant':
                $interests_all.hide();
                $("#interest_4").show();
                ignoreClasses = '.s1,.s2,.s5';
                break;
            case 'vendor':
                $interests_all.hide();
                $("#interest_5").show();
                ignoreClasses = '.s1,.s2,.s4';
                break;
    
            default:
                $interests_all.hide();
            }
            // field validation (now being called from within the change listener)
            $("#leadform").validate({
                ignore: ignoreClasses
            });
        });
    });
    

    【讨论】:

    • 非常感谢您将这些值纳入忽略。但有一个问题。只有当用户更改#Relationship 选择框时,整个表单验证才有效。如果用户只是填写了他们的姓名,那么点击提交表单根本不会被验证。
    • 那么你需要做的是声明ignoreClasses outside of $(document).ready() 使其成为一个全局变量。然后使用提交侦听器将validate 函数附加到表单提交:$('form#leadform').submit(function(){$(this).validate({ignore: ignoreClasses});});
    • 您也可以将ignoreClasses 保留在原处,并将其声明为window['ignoreClasses']=""。然后,您将在提交处理程序中以相同的方式引用它。
    • 非常感谢乔纳森,但我在这里有点不知所措,所以我不知道我是否能让您的解决方案发挥作用。我将在上面发布我的最新代码。
    • 不要气馁!你快到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多