将 jquery 版本从 2.1 升级到 3 后,淘汰验证自定义规则不起作用

Posted

技术标签:

【中文标题】将 jquery 版本从 2.1 升级到 3 后,淘汰验证自定义规则不起作用【英文标题】:Knockout Validation Custom rules are not working after upgrading jquery version from 2.1 to 3 【发布时间】:2021-02-17 22:26:08 【问题描述】:

我正在使用淘汰赛 3.2 。我有一个添加了自定义淘汰规则的字段,该规则从 ajax 调用中获取其值。它在 Jquery 2.1 版中运行良好。但是当我将 jquery 版本升级到 3.0 时,它不知何故停止了工作。下面是示例代码。

现场验证

self.ViewModel.Id.extend(

idExist:param:true
);

自定义规则(使用参数 async:false 完成 ajax 调用)

ko.validation.rules.idExist = 
 validator:function(id, validate)
 var idExist = false;
 $.when(
    $.ajax())
      .then(function(data)
           idExist  = data;
    );
 return idExist ;
 ,
 message:"Id not exist"
 

经过一番分析,发现jquery升级后,validator并没有等待ajax调用结束,直接返回idExist =false。

有什么想法吗?谢谢。

【问题讨论】:

将return语句放入then函数... 尝试了同样的方法,但问题仍然存在。 【参考方案1】:

通过添加 async:true.PFB 更新的代码,问题得到解决。

 validator:function(id, validate)
 var idExist = false;
 $.when(
    $.ajax())
      .then(function(data)
           idExist  = data;
    );
 return;
 ,
 message:"Id not exist",
async:true
 

【讨论】:

以上是关于将 jquery 版本从 2.1 升级到 3 后,淘汰验证自定义规则不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Struts从2.1升级到2.3版本过程

jQuery 从 1.8.3 升级到 3.5.1

Android Studio 3.2.1 升级后的构建错误

将magento 2.1.6升级到2.2.7后需要Js错误

从 2.1 升级到 2.2.4 后 Grails 自动编译中断

SpringBoot 升级到 2.1 后,启动程序时控制台不打印 API 的解决方法及一些感想