规则循环 Jquery
Looping of rules Jquery
我有一个表格,最多可以推荐 5 个人。在表单中,如果推荐人 1 的姓名已填写,下面的 jquery 代码会检查并提示用户填写与推荐人 1 相关的其他表单字段。
我想知道是否可以创建一个循环来执行 5 倍检查,而不是为每组推荐复制和粘贴以下代码?
$("#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
},
});
规则也可以通过 the .rules()
method 应用,这使您能够使用 jQuery 选择器来更通用地定位事物。 So when the selector targets multiple items, you can use a jQuery .each()
to loop through them all.
$('.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));
}
编辑:
首先,所有内容都需要重新设计以更加通用。我采用了 并对其进行了一些修改以获得更通用的内容。我没有有条件地查看每个字段,而是使用 skip_or_fill_minimum
规则来替换 required
规则。
演示: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]'];
}
}
});
});
演示版: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++;
});
我有一个表格,最多可以推荐 5 个人。在表单中,如果推荐人 1 的姓名已填写,下面的 jquery 代码会检查并提示用户填写与推荐人 1 相关的其他表单字段。
我想知道是否可以创建一个循环来执行 5 倍检查,而不是为每组推荐复制和粘贴以下代码?
$("#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
},
});
规则也可以通过 the .rules()
method 应用,这使您能够使用 jQuery 选择器来更通用地定位事物。 So when the selector targets multiple items, you can use a jQuery .each()
to loop through them all.
$('.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));
}
编辑:
首先,所有内容都需要重新设计以更加通用。我采用了 skip_or_fill_minimum
规则来替换 required
规则。
演示: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]'];
}
}
});
});
演示版: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++;
});