Пользовательские правила проверки нокаута не работают после обновления версии jquery с 2.1 до 3

#jquery #knockout.js #knockout-validation

#jquery #knockout.js #проверка нокаута

Вопрос:

Я использую нокаут 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 валидатор не ожидает вызова ajax для over и напрямую возвращает idExist =false .

Есть идеи? Спасибо.

Комментарии:

1. поместите оператор return в функцию then …

2. Пробовал то же самое, но проблема все еще сохраняется.

Ответ №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
 }