-1

我有一个对象用作传递给 jquery 验证器插件的参数:

var  param = {rules: {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
       }
     };

我有三个具有相似字段的表单,但它们被命名为'xxx[name]','xxx[tel]'等。我需要编写一个函数来替换 param 对象中的对象名称,但由于某种原因,我对如何我感到困惑可以做到这一点。我试过了:

function insertParam(par1) {
     var  param = {rules: {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
       }
     };

 param['rules']['name'] = param['rules'][par1 + '[name]'];
 param['rules']['tel'] = param['rules'][par1 + '[tel]'];

 return param;
 };

但这不起作用。那么,这是如何正确完成的呢?将不胜感激任何反馈。

编辑:小提琴http://jsfiddle.net/qzgaS/

4

1 回答 1

0

您混合了分配顺序和符号。

由于您在属性名称中使用了一些“特殊”(例如,[)字符,因此您应该使用括号表示法。

否则,对于常量属性,请使用

foo.bar

代替

foo['bar']

为了更好的可读性。

您想从模板生成参数对象。这可以通过构造具有所需属性的对象并将模板的值分配给它们来完成,如下所示:

function insertParam(par1) {
     var  rules = {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
    };

    var result = {"rules":{}};
    result.rules[par1 + '[name]'] = rules.name;
    result.rules[par1 + '[tel]'] = rules.tel;

    return result;
};

调用时,它将产生所需的输出:

>>> insertParam('Call')

{
    "rules": {
        "Call[name]": {
            "required": true
        },
        "Call[tel]": {
            "required": true,
            "number": true
        }
    }
}

演示

于 2013-07-28T11:19:26.340 回答