我有一个构建的js表单构建器函数,它根据外部json文件中的数据输出表单元素。在json数据中,它还包含验证规则和消息的数据。
示例数据:
"rows": [
[{
"Name": "FirstName",
"Description": "Enter your name",
"IsRequired": true,
"Datatype": "string",
"Maxlength": 255,
"InputLabel": "Name",
"InputInitialValue": "",
"InputSourceChannel": "constant",
"FieldWidth": 170,
"PlaceholderText": "Joe Blogs",
"ValidationMessage": "Please provide your name"
}]
]
我希望从子文件中的数据生成jQuery验证所使用的规则和消息的变量,并根据json数据中设置的值有条件地添加验证方法,如电子邮件,最大长度等。
例如,我想将email: true
方法添加到电子邮件输入字段的规则以及required: true
方法(应该设置)。
示例预期结果
FirstName: {
required: true
},
LastName: {
required: true
},
Title: {
required: true,
max-length: 50
},
Company: {
required: true
},
Email: {
required: true,
email: true
},
Phone: {
required: true,
phone: true
}
演示
http://jsfiddle.net/onebitrocket/6d73jyen/
如果zDatatype:email`匹配数组中的值,则添加email: true
方法需要if \ else语句。
如果我想添加一些额外的方法,比如maxlength,那么if语句可能会有点混乱。
是否有方法可以将所有必需的方法连接到变量中,然后在对象中调用变量?
我认为我理解所有条件语句都需要在js
之外完成由于
答案 0 :(得分:0)
修复了使用$.extend
从每个validationRule类型/ required的唯一对象构造新对象
https://stackoverflow.com/a/10892275/1376820
var validationRulesRequired = {},
validationRulesType = {},
validationRules;
$.each(jsonData.rows, function(key, value) {
$.each(value, function(ikey, ivalue) {
// generate validation messages
if (ivalue.ValidationMessage) {
validationMessages[ivalue.Name] = ivalue.ValidationMessage;
}
// generate validation rules
if (ivalue.IsRequired) {
var validationInputTypes = ['email', 'phone'];
if ($.inArray(ivalue.Datatype, validationInputTypes) > -1) {
validationRulesType[ivalue.Name] = {
[ivalue.Datatype]: true,
};
}
validationRulesRequired[ivalue.Name] = {
['required']: true,
};
}
});
});
var validationRules = $.extend(true, {}, validationRulesRequired, validationRulesType);
console.log(validationRules);