循环规则Jquery

时间:2016-06-06 07:12:50

标签: jquery loops jquery-validate

我有一个表格,允许人们最多推荐5个人。在表单中,如果填写了引用1的名称,则下面的jquery代码会检查并提示用户填写与引用1相关的其他表单字段。

我想知道是否有可能创建一个循环来执行检查5x而不是复制并粘贴以下代码用于每组引用?

$("#customer_referral").validate({  

        rules: {

           Referral_1_Salutation: {
                required: function(element) {
                 if($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){
                     return true;                            
                 } else {                    
                     return false;
                 } 
                }           
            },

           Referral_1_Name: {
                required: function(element) {
                 if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Email"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){
                     return true;                            
                 } else {                    
                     return false;
                 } 
                }                   
            },  
           Referral_1_Email: {
                required: function(element) {
                 if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){
                     return true;                            
                 } else {                    
                     return false;
                 } 
                }                   
            },  

           Referral_1_Best_Time_To_Call: {
                required: function(element) {
                 if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')){
                     return true;                            
                 } else {                    
                     return false;
                 } 
                }                   
            },                                                  

        //Check if any one of the contact number is filled
        Referral_1_Contact_Number_Mobile: {
            require_from_group_contact: function(element) {
                if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) {
                    return [1, ".oneormore"];
                } else {
                    return [0, ".oneormore"];
                }
            }
        },

        Referral_1_Contact_Number_Home: {
            require_from_group_contact: function(element) {
                if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) {
                    return [1, ".oneormore"];
                } else {
                    return [0, ".oneormore"];
                }
            }
        },
        Referral_1_Contact_Number_Office: {
            require_from_group_contact: function(element) {
                if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) {
                    return [1, ".oneormore"];
                } else {
                    return [0, ".oneormore"];
                }
            }
        }
        //End of check if any one of the contact number is filled                                                                   

        },
 });

1 个答案:

答案 0 :(得分:0)

规则也可以通过the .rules() method应用,这使您能够使用更一般地定位事物的jQuery选择器。因此,当选择器针对多个项目时,您可以使用jQuery .each()来遍历它们。

$('.myfields').each(function() {
    $(this).rules('add', {
        required: true,
        // other rules
    });
});

旁注......

required: function(element) {                  
    if ($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) {
        return true;                            
    } else {                    
        return false;
    } 
}   

由于你是根据布尔条件返回一个布尔值,只需返回条件的结果就可以大大简化你的函数...

required: function(element) {                    
    return ($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0));
}   

修改

首先,需要重新设计所有内容以使其更通用。我拿了the code from your previous question并稍微改了一下以获得更通用的东西。我没有有条件地查看每个字段,而是使用skip_or_fill_minimum规则来替换required规则。

DEMO:http://jsfiddle.net/yo2vjwus/

现在我们有一个足够通用的工作模型,我们可以使用.rules()方法一次将这些规则应用于多个字段。

$('[name^=Referral_1_]:not("[name^=Referral_1_Contact]")').each(function() {
    $(this).rules('add', {
        skip_or_fill_minimum: [4, '[name^=Referral_1_]:not("[name^=Referral_1_Contact]")']
    });
});

$('[name^="Referral_1_Contact"]').each(function() {
    $(this).rules('add', {
        require_from_group: function(element) {
            if ($('[name="Referral_1_Salutation"]').is(':filled')) {
                return [1, '[name^=Referral_1_Contact]'];
            } else {
                return [0, '[name^=Referral_1_Contact]'];
            }
        }
    });
});

DEMO:http://jsfiddle.net/yo2vjwus/1/

至于其余四组字段,您必须复制此代码或使其更通用,并将所有内容放在另一个jQuery .each()中。

var i = 1;

$('[id^="Referral"]').each(function() {

    $('[name^=Referral_' + i + '_]:not("[name^=Referral_' + i + '_Contact]")').each(function() {
        $(this).rules('add', {
            skip_or_fill_minimum: [4, '[name^=Referral_' + i + '_]:not("[name^=Referral_' + i + '_Contact]")']
        });
    });

    $('[name^="Referral_' + i + '_Contact"]').each(function() {
        $(this).rules('add', {
            require_from_group: function(element) {
                if ($(element).parents('.parentClass').find('[name$="_Salutation"]').is(':filled')) {
                    return [1, '[name^="Referral_' + i + '_Contact"]'];
                } else {
                    return [0, '[name^="Referral_' + i + '_Contact"]'];
                }
            }
        });
    });

    i++;

});

DEMO:http://jsfiddle.net/yo2vjwus/2/