【发布时间】:2023-04-07 19:32:01
【问题描述】:
我有一些适用于 jQuery.validate 的 JavaScript。这需要从服务器返回的 JSON 对象,并将其传递给 showErrors 函数。 response.errors 对象看起来像这样...
{[
{ item1: "Email", item2: "Invalid format" },
{ item1: "ExpiryDate", item2: "Must be in the future" }
]{
以下 ES6 代码可以正常工作...
for(var i = 0; i < response.errors.length; i++) {
$('form').validate()
.showErrors({ [response.errors[i].item1]: response.errors[i].item2 });
}
但是,我刚刚发现 IE 不支持 ES6,所以这在那里不起作用。我尝试使用 es6-shim(和 es-5shim),但没有帮助。
我一直在尝试编写一些与 ES5 兼容的代码来做同样的事情,但每次尝试都失败了。我已经查看了诸如this one 和this one 之类的答案,但我什么都做不了。
我最近的尝试如下...
var error = {};
error[response.errors[i].item1] = response.errors[i].item2;
$('form').validate().showErrors(error);
但是,尽管将error 和之前的代码转储到控制台显示它们是相同的,但当我尝试使用此代码时,控制台中出现错误...
Uncaught (in promise) TypeError: Cannot read property 'type' of undefined 在 $.validator.highlight (jquery.validate.js:344) 在 $.validator.defaultShowErrors (jquery.validate.js:912) 在 $.validator.showErrors (jquery.validate.js:546) 在handleServerResponse(捐赠:305)
有问题的线路是我打电话给showErrors的线路
谁能帮帮我?
更新只是为了澄清一下,我在循环中执行此操作的原因是服务器端代码返回三种类型的错误,与特定输入元素相关的正常错误,与特定输入元素相关的一般错误数据作为一个整体,以及特定于表单的支付部分的数据。我只将第一种类型传递给jQuery.validate,因为第二种类型显示在表单的独立部分中,而第三种类型必须以不同的方式处理,因为支付处理器在iframe 中生成自己的 HTML,这意味着我必须手动添加错误。
第二次更新原来是页面的一个单独部分上的一些代码抛出了我的 JavaScript。我拥有的代码,以及两个答案中显示的代码都很好,这是一个单独的问题。
【问题讨论】:
-
这不是你的代码的问题,你在这里使用的库
jquery.validate.js正在创建错误,可能是用es6编写的
标签: javascript jquery jquery-validate ecmascript-5