Parsley.js isValid () возвращает ноль, используя пользовательский валидатор - PullRequest
0 голосов
/ 26 января 2019

Я использую пользовательский валидатор parsley.js (2.8.1), чтобы проверить, существует ли уже введенный код на сервере.Все работает нормально, но parsley().isValid() и parsley().validate() возвращает null при отправке.

Удаление пользовательского валидатора работает нормально, но я не могу проверить существующий код на сервере со стороны клиента.

     <form id="product-form">
   [....]
   <input id="product-code"
    data-parsley-code="check-code" data-parsley-length="[3,32]"
    type="text" class="form-control" required>
   [....]
   </form>

   <script>
    $(function(){
        let formInstance = $('#product-form');
        formInstance.parsley();
        Parsley.addValidator('code', {
            validateString: function(value, requirement) {
                let xhr = $.post('/product/' + requirement + '/' + value);
                return xhr.then(function (json) {
                    if (!json.status) {
                        return $.Deferred().reject(json.message)
                    }
                })
            },
            messages: {en: 'Failed to check product code.'}
        });

        formInstance.on('submit', function(e) {
        e.preventDefault();
          console.log(formInstance.parsley().validate());  // returns null
          console.log(formInstance.parsley().isValid()); // returns null
       if (formInstance.parsley().isValid())) {
           [.....]
       }
   }
    [.....]
    </script>

Я бы хотел проверить, отправить форму и выполнить Ajax.

1 Ответ

0 голосов
/ 17 февраля 2019

Option1:

Поскольку ваш код работает с обещаниями, перейдите на whenValidate, из документации :

Метод validate ({group, force}), который возвращает логическое или нулевое значение всегда будет возвращать ноль из-за удаленной проверки, всегда возвращающейся открытой обещает.

Обратите внимание, что ваш обработчик пропускает оператор return в случае true.

Пожалуйста, прочитайте внутреннюю реализацию parsley.remote.js для справки (если все еще сложно, перейдите к option2)

Option2:

Вы можете добавить файл parsley.remote.js js в свой проект, а затем использовать addAsyncValidator

Хороший пример удаленного использования здесь и здесь .

...