我使用jquery validate插件来验证我的表单。还有服务器端验证,我希望能够标记显示服务器端验证错误的字段,如唯一的电子邮件,如果它没有被jquery验证捕获。
我从我的服务器脚本接收了一个json对象,该对象具有字段名称,然后出错。
我想过使用showErrors()
功能,但无法找到正确的方法来实现这一功能。到目前为止,这是我的剧本:
$.each(errors, function (key, value) {
console.log("Key:", key);
validator.showErrors({
key: value[0]
})
});
这会引发错误 - uncaught typeError
所以我假设引用键,因为字段名称没有删除它。我意识到它正在评估key
作为字段名称而不是key
中包含的值,而这正是我想要实现的目标。
由于
答案 0 :(得分:3)
您正在循环访问JSON对象。
我将假设您的errors
json对象是这样的:
var errors = [
{"firstname": "I know that your firstname is Ray, Ray!"},
{"age":"You're not so old"},
{"job":"You're not Buddha"}
];
在$.each
循环的第一次迭代中,v
参数是k
位置的整个对象,在这种情况下:
{"firstname": "I know that your firstname is Pete, Pete!"}
你可以看到这里需要第二个$.each
循环,它将迭代每个对象元素的属性。
$.each(errors, function() {
$.each(this, function(k, v) {
/* ... code ... */
});
});
从documentation showErrors
方法获取Object
作为参数。
你需要建立它。
//my validator object
var validator = $( "#yourFormID" ).validate();
// empty object that I'll fill with name input/errors
var objErrors = {};
//iterate over array of objects/maps
$.each(errors, function() {
//iterate over the properties on each object
$.each(this, function(k, v) {
objErrors[k] = v;
});
});
validator.showErrors(objErrors);
在循环中,我构建了我已经传递给对象showErrors
的方法validator
的对象。
我选择这个解决方案是因为这样,我只调用一次showErrors
,而不是每次都在$.each
循环中调用它。
Here一个有效的jsbin示例。