【问题标题】:Parsley Validation throwing: Validator `undefined` does not handle multiple values欧芹验证抛出:验证器“未定义”不处理多个值
【发布时间】:2017-09-27 16:14:27
【问题描述】:

我有一个模态表单,我在 Parsley 成功验证后尝试使用 ajax 手动发布。当模式打开时,我首先在表单上初始化 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',
};

有什么建议吗?非常感谢

【问题讨论】:

  • 如果没有parsleyOptions的内容,以及对addValidator的调用,是无法分辨的。 专业提示:总是发布一个最小的实例。
  • 我已经对其进行了更新,现在包含了这些选项。没有对 addValidator 的调用,一切都是通过数据属性完成的。谢谢。
  • 可能是对多值输入(如选择框)的无效验证?

标签: javascript validation parsley.js


【解决方案1】:

我设法让它工作,但在验证周围使用了一个 try catch 块。这很奇怪,因为当 validate 函数在初始验证后再次使用时抛出错误时,它仍然会使用各个字段是否失败(通过 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

            }

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

【讨论】:

    【解决方案2】:

    我无法准确解释原因,但我们遇到了这个错误,因为我们使用了

    = 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 类型,而工作的是收音机。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多