2012-11-10 108 views
-1

我在脚本中看到下面的错误。请帮助:错误。从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.have正确的价值观。

+1

你应该发布代码,而不是错误。 – undefined

+0

发布了一个html格式的示例,显示了一些输入。插件使用'输入'名称属性的规则和消息对象,他们必须符合JavaScript对象表示法 – charlietfl

回答

0

您不能使用data.modules[2].fields[0].name作为对象字面量中的标识符。标识符总是一个名称,绝不是表达式的值。

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

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

(我试着写了,你要创建的对象的实际代码,但是代码是如此打破(即错误或遗漏的分隔,无与伦比的括号),这是不可能告诉什么对象结构应该没有什么是应该做的知识)

+0

这不会很复杂,然后。我已经提供了JSON。因此,任何更简单的方法来验证我的脚本中的形式?请帮忙。 – user1814044

+0

是的,这有点复杂,因为你想在对象中使用标识符的值。没有什么好方法可以在单个语句中创建这样的对象,所以您必须从零件中构建它。你可以通过使用对象的字符串格式来使用模板化方法,替换标识符,然后使用'eval'将它解析成一个对象,但即使可以用单个对象来完成,它也非常复杂声明。 – Guffa

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" 
      } 
     } 
    }); 
+0

@ bdesham-试过你的解决方案。仍在失踪:错误 – user1814044

+1

对于逗号是正确的,但是它的值就像'data.modules [2] .fields [0] .name'用作导致错误的标识符。脚本解析器没有达到第一个需要的逗号。 – Guffa

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在同一级别,而不是messagesrules内。

+0

试图解决你的问题。 。在第一行本身错误:仍然即时得到缺少 – user1814044

+0

$( “#FRM”)验证({ \t变种FIELD1 = data.modules [2]点域[0]。名称; \t \t \t \t \t变种FIELD2 = data.modules [2] .fields [1]。名称; \t \t \t \t \t var rules = {}; \t \t \t \t \t rules [field1] =“required”; \t \t \t \t \t规则[FIELD2] = { \t \t \t \t \t \t \t “需要”:真 \t \t \t \t \t}; \t \t \t \t \t var messages = {}; \t \t \t \t \t messages [field1] =“输入您的名字”; \t \t \t \t \t消息[字段2] = { \t \t \t \t \t \t \t “需要”: “请输入一个有效的电子邮件地址”, \t \t \t \t \t \t \t “MINLENGTH个”:“请输入有效电子邮件地址“ \t \t \t \t \t}; \t \t \t \t \t}); – user1814044

+0

我正在使用jquery.validation.js – user1814044