2017-09-27 56 views
0

我有一个模式的表单我试图手动POST使用ajax后,它已被成功验证了欧芹。当模式被打开时,我第一次初始化香菜与形式:欧芹验证投掷:验证器`undefined`不处理多个值

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', 
}; 

有什么建议吗?非常感谢

+0

没有'parsleyOptions'的内容,并且调用'addValidator',这是不可能告诉的。 *专业提示*:总是发布一个最小的现场示例。 –

+0

我已经更新它以包含现在的选项。没有调用addValidator,并且一切都通过数据属性完成。谢谢。 – Jingo

+0

也许对多值输入(如选择框)进行无效验证? –

回答

0

我设法让这个工作,但在验证周围使用try catch块。这很奇怪,因为当validate函数在初始验证后再次使用时会抛出错误,它仍然更新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 

      } 

仍然不知道这是一个错误还是我的不正确的实现。