我有一个表格,允许人们最多推荐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
},
});
答案 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++;
});