我正在使用 jquery 验证插件来验证我的表单。还有服务器端验证,我希望能够标记显示服务器端验证错误的字段,例如唯一的电子邮件(如果 jquery 验证未捕获到该错误)。
我从服务器脚本接收到一个 json 对象,该对象具有字段名称,然后出现错误。
我想过使用 showErrors()
函数,但无法找到使其正常工作的正确方法。这是到目前为止我的脚本:
$.each(errors, function (key, value) {
console.log("Key:", key);
validator.showErrors({
key: value[0]
})
});
这会抛出一个错误 - uncaught typeError
因此我假设引用 key 作为字段名称不会删除它。我意识到它正在将 key
评估为字段名称,而不是 key
中包含的值,这正是我想要实现的目标。
谢谢
最佳答案
您正在循环访问 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);
在循环中,我构建了对象,并将其传递给对象 validator
的 showErrors
方法。
我选择此解决方案是因为像这样,我只调用一次 showErrors
,而不是每次在 $.each
循环中调用它。
Here一个有效的 jsbin 示例。
关于jquery validate 在动态字段名称上显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579949/