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

Knockout Validation Custom rules are not working after upgrading jquery version from 2.1 to 3

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

字段验证

self.ViewModel.Id.extend(
{
idExist:{param:true}
});

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

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。

有什么想法吗?谢谢

通过添加 async:true.PFB 更新的代码解决了这个问题。

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