【问题标题】:jquery validate show error on dynamic field namejquery validate 在动态字段名称上显示错误
【发布时间】:2015-09-15 07:16:50
【问题描述】:

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

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

我曾想过使用showErrors() 函数,但无法找到正确的方法来让它工作。到目前为止,这是我的脚本:

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

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

谢谢

【问题讨论】:

    标签: jquery validation


    【解决方案1】:

    您正在循环一个 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 示例。

    【讨论】:

    • 太好了。今晚我将尝试实施。感谢您的完整回答。真的很有用。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多