jquery验证动态字段名称显示错误

时间:2015-09-15 07:16:51

标签: jquery validation

我使用jquery validate插件来验证我的表单。还有服务器端验证,我希望能够标记显示服务器端验证错误的字段,如唯一的电子邮件,如果它没有被jquery验证捕获。

我从我的服务器脚本接收了一个json对象,该对象具有字段名称,然后出错。

我想过使用showErrors()功能,但无法找到正确的方法来实现这一功能。到目前为止,这是我的剧本:

$.each(errors, function (key, value) {
    console.log("Key:", key);
    validator.showErrors({
    key: value[0]
    })
});

这会引发错误 - uncaught typeError所以我假设引用键,因为字段名称没有删除它。我意识到它正在评估key作为字段名称而不是key中包含的值,而这正是我想要实现的目标。

由于

1 个答案:

答案 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示例。