2017-09-27 106 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 

      } 

仍然不知道這是一個錯誤還是我的不正確的實現。