请我有这样的表格:
<form>
<p>
<label for="field_userAddress">Adresse (*)</label>
<input type="text" name="userAddress" id="field_userAddress" />
</p>
<p>
<label for="field_userCP">CP (*)</label>
<input type="text" name="userCP" id="field_userCP" />
</p>
<p>
<label for="field_vars[1]">vars one (*)</label>
<input type="text" name="vars[1]" id="field_uservars[1]" />
</p>
<p>
<label for="field_vars[2]">Vars two (*)</label>
<input type="text" name="vars[2]" id="field_vars[2]" />
</p>
</form>
我希望使用AJAX控制字段,所以我在php端完成了工作,最后我以这种方式请求使用JQuery json字符串:
{
"status": 0,
"err": {
"userAddress": "required",
"userCP": "required"
},
"errr": {
"vars": {
"1": "required",
"2": "required"
}
}
}
我想在相关字段前面显示每条消息。
因此,对于第一个“错误”,我使用了这些行并且它有效:
$.each(r.err,function(k,v)
{
form.find('[name='+k+']').closest('p').append(v);
});
但是对于第二个“错误”,我尝试了这些行:
$.each(r.errr.vars,function(y,z)
{
form.find('[name="'+y+'['+z+']"'+']').closest('p').append(z);
});
它不起作用!
我发现这对我来说有点复杂。请问任何建议?
答案 0 :(得分:0)
我认为你遗漏了json的一部分内容。如果你想要各种必需的字段,你应该只需要一个名为required的json数组。
{
"err": {
"required": ["userAddress", "userCP"]
},
"errr": {
"vars": {
"required": ["1", "2"];
},
}
}
如果你想解析这个
$。each(r.err,function(k,v) { $('form [name ='+ v +']')。nearest('p')。append(k); });
答案 1 :(得分:0)
你需要转义属于每个jQuery选择器转义规则名称一部分的[]
。
这应该有效:
$.each(r.errr.vars,function(y,z) {
form.find('input[name="vars\\['+y+'\\]"]').closest('p').append(z);
});
API文档http://api.jquery.com/category/selectors/
阅读有关逃避的最新段落
答案 2 :(得分:0)
我建议您使用ID来定位特定的输入字段并移交错误消息。而不是在id属性中使用[]我建议做这样的事情:
HTML:
<form>
<p>
<label for="field_userAddress">Adresse (*)</label>
<input type="text" name="userAddress" id="field_userAddress" />
</p>
<p>
<label for="field_userCP">CP (*)</label>
<input type="text" name="userCP" id="field_userCP" />
</p>
<p>
<label for="field_vars_1">vars one (*)</label>
<input type="text" name="vars[1]" id="field_vars_1" />
</p>
<p>
<label for="field_vars_2">Vars two (*)</label>
<input type="text" name="vars[2]" id="field_vars_2" />
</p>
</form>
JavaScript的:
$.each(r.errr.vars,function(y,z) {
form.find('input#field_vars_'+y).parent().append('<span>'+z+'</span>');
});
工作得很好。 // http://jsfiddle.net/bbSw9/