【问题标题】:Generate jquery validation rules and messages from json data从 json 数据生成 jquery 验证规则和消息
【发布时间】:2015-12-07 15:53:44
【问题描述】:

我有一个内置的 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/

添加email: true 方法需要一个 if\else 语句 if zDatatype: email` 匹配数组中的一个值。 如果我想添加诸如 maxlength 之类的其他方法,那么额外的 if 语句可能会有些混乱。

有没有办法可以将所有需要的方法连接到一个变量中,然后在对象中调用该变量?

我认为我理解所有条件语句都需要在js之外完成是正确的

谢谢

【问题讨论】:

    标签: jquery arrays json validation object


    【解决方案1】:

    修复了使用$.extend 从每个validationRule 类型/必需的唯一对象构造一个新对象

    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);
    

    查看更新的小提琴 http://jsfiddle.net/onebitrocket/6d73jyen/6/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2014-06-09
      相关资源
      最近更新 更多