脚本中的错误。从json获取数据

时间:2012-11-10 17:06:31

标签: jquery json

我的脚本中出现以下错误。请帮忙:

missing : after property id
[Break On This Error]   

data.modules[2].fields[0].name:"required";

PFB脚本:

$("#frm").validate({
    "rules": {
        data.modules[2].fields[0].name: "required";
        data.modules[2].fields[1].name: {
            "required": "true",
            data.modules[2].fields[1].name: "true"
        }

        "messages": {
            data.modules[2].fields[0].name: "Enter your firstname",
            data.modules[2].fields[1].name: {
                "required": "Please enter a valid email address",
                "minlength": "Please enter a valid email address"
            }
        }
    });

这是我的html表单:

html += '<form id="frm" method="get" type='+data.modules[2].type+' class='+data.modules[2].attributes.class+'name='+data.modules[2].name+
                    'action='+data.modules[2].action+'><p>'+data.modules[2].title+'</p>'
                    html += '<label class="firstname">'+data.modules[2].fields[0].label+'</label>';
                    html += '<input type='+data.modules[2].fields[0].type+'name='+data.modules[2].fields[0].name+'value='
                    +data.modules[2].fields[0].value+'/>';
                    html += '<label class="Email">'+data.modules[2].fields[1].label+'</label>';
                    html += '<input type='+data.modules[2].fields[1].type+'name='+data.modules[2].fields[1].name+'value='
                    +data.modules[2].fields[1].value+'/>';

我在上面的html中得到了正确的值。通过发出警报来测试。

3 个答案:

答案 0 :(得分:0)

您不能将data.modules[2].fields[0].name用作对象文字中的标识符。标识符始终是名称,而不是表达式的值。

如果要将值用作标识符,则必须先创建对象,然后使用索引语法设置属性。例如:

var obj = {};
obj[data.modules[2].fields[1].name] = "required";

(我试着为你想要创建的对象编写实际代码,但是代码是如此破碎(即错误或缺少分隔符,无法匹配的括号),如果没有知识就不可能知道对象结构应该是什么关于它应该做什么。)

答案 1 :(得分:0)

您需要在JavaScript词典的元素之间包含逗号:

$("#frm").validate({
    "rules": {
        data.modules[2].fields[0].name: "required",
        data.modules[2].fields[1].name: {
            "required": "true",
            data.modules[2].fields[1].name: "true"
        },

        "messages": {
            data.modules[2].fields[0].name: "Enter your firstname",
            data.modules[2].fields[1].name: {
                "required": "Please enter a valid email address",
                "minlength": "Please enter a valid email address"
            }
        }
    });

答案 2 :(得分:0)

您不能将变量用作具有对象文字语法的键。您可以通过以编程方式构建配置对象来实现所需的目的:

var field1 = data.modules[2].fields[0].name;
var field2 = data.modules[2].fields[1].name;

var rules = {};

rules[field1] = "required";
rules[field2] = {
  "required": true
};

var messages = {};

messages[field1] = "Enter your firstname";
messages[field2] = {
  "required": "Please enter a valid email address",
  "minlength": "Please enter a valid email address"
};

$("#frm").validation({"rules": rules, "messages": messages});

此外,您的代码缺少右括号。我假设您希望rulesmessages位于同一级别,而不是messages位于rules内。