欧芹验证抛出:验证器“未定义”不处理多个值

Parsley Validation throwing: Validator `undefined` does not handle multiple values

我在模式中有一个表单,在 Parsley 成功验证后,我正在尝试使用 ajax 手动 POST。打开模式时,我首先在表单上初始化 Parsley:

modalLaunchers.createTaskFormValidation = $(document.getElementById('create-task-form')).parsley(parsleyOptions);

然后提交表单时,我有以下代码:

  modalLaunchers.createTaskFormValidation.validate();
  if (modalLaunchers.createTaskFormValidation.isValid()) {
         // do ajax POST
    }

如果有不正确的字段,这些字段会正确突出显示。但是,如果随后更正这些字段并重新提交表单,我会收到以下错误:

Uncaught Validator `undefined` does not handle multiple values

validate() 和 isValid() 都会抛出该错误。

显然我希望在再次按下提交时重新验证表单,如果有效,则继续 POST。但是,由于抛出该错误,因此不会继续进行。我的 Parsely 选项如下:

const parsleyOptions = {
    // errorsWrapper: '',
    errorTemplate: '<span class="error-msg"></span>',
    // successClass: 'has-success',
    errorClass: 'has-error',
    classHandler: (el) => {
        console.log(el.$element.closest('div.form-group'));
        return el.$element.closest('div.form-group');   
    },
    excluded: 'input.select2-search__field',
};

有什么建议吗?非常感谢

我设法让它工作,但在验证周围使用了一个 try catch 块。这很奇怪,因为当验证函数在初始验证后再次使用时抛出错误时,它仍然会根据各个字段是否失败来更新 parsley 对象(通过 fields.field.validationResult 属性)并用失败的字段更新 UI。因此下面的工作(虽然它确实感觉很乱):

            event.preventDefault();
            try {
                modalLaunchers.createTaskFormValidation.validate();
            } catch (err) {
                console.log(err);
            }
            if (modalLaunchers.createTaskFormValidation.fields.some(field => field.validationResult !== true) === false) {

    // ensure every field.validationResult is true. If it is, continue to the post, if not return and keep the UI errors

            }

仍然不确定这是错误还是我的实施不正确。

我无法准确解释原因,但我们出现此错误是因为我们使用了

= f.input :read_parent_info, as: :boolean, required: true, input_html: {data: {parsley_select_yes:''}

但我注意到这个没问题:

= f.input :read_code_conduct, as: :radio_buttons, required: true, input_html: {data: {parsley_select_yes:''}}, collection: @enrolment_service.yes_no_radio_options,

不同之处在于,有问题的是 :boolean 类型,而有效的是收音机。

所以也许在您的表格中您正在做类似的事情。