欧芹验证抛出:验证器“未定义”不处理多个值
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 类型,而有效的是收音机。
所以也许在您的表格中您正在做类似的事情。
我在模式中有一个表单,在 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 类型,而有效的是收音机。
所以也许在您的表格中您正在做类似的事情。