Parsley.js -在同一页面上以不同形式具有相同名称的单选按钮将被一起验证
Parsley.js - Radiobuttons with same name in different forms on same page are validated together
我已经找了将近2天了,但似乎找不到这个问题的答案。
在一个页面上,我有两种不同的形式(注册,客人退房)。两者都使用几乎相同的表单元素,然后具有相同的name属性。在提交时,只有当前的表单得到验证,一切工作正常,例如文本输入字段。
BUT:单选按钮和复选框在Parsley.js中被不同地处理-因此在提交客人结账表单(在标记中是第二)时,错误消息和类被添加到注册表单中。这只适用于这两种输入类型。
看起来欧芹对这些元素属于哪一种形式没有影响。它只查看name属性。这有点烦人,特别是当其他输入类型共享相同的名称属性时没有问题。
下面是HTML的代码片段:
<form id="registrationForm" data-validate-form="true" ...>
<label>Mrs</label>
<input type="radio" name="salutation" value="mrs"/>
<label>Mr</label>
<input type="radio" name="salutation" value="mr" data-validate-required="true"/>
<label>Firstname</label>
<input type="text" name="firstname" data-validate-required="true"/>
</form>
<form id="guestcheckout" data-validate-form="true" ...>
<label>Mrs</label>
<input type="radio" name="salutation" value="mrs"/>
<label>Mr</label>
<input type="radio" name="salutation" value="mr" data-validate-required="true"/>
<label>Firstname</label>
<input type="text" name="firstname" data-validate-required="true"/>
</form>
这里是JavaScript设置:
$('[data-validate-form]').parsley({
namespace : 'data-validate-',
errorsWrapper : '<div></div>',
errorTemplate : '<span></span>',
errorClass : 'error',
successClass : 'success'
});
如何解决这个问题?哦,我不能更改名称属性
所以,我和我的同事找到了一个解决方案。
在handleMultiple
方法中,我们定义了元素的当前形式,并将其ID添加到multiple
字符串中:
// Add current form id to name to differ between several forms on same page.
var currentForm = $('#' + this.$element[0].form.id);
multiple = currentForm.attr('id') + '-' + multiple;
然后我们将currentForm
添加到输入选择器中,如下所示:
$('input[name="' + name + '"]', currentForm).each(function () {...}
这确保只选择正确形式的输入。
转到setupField
方法。在_ui.errorsWrapperId
的定义中,我们还添加了当前表单(fieldInstance.$element[0].form.id
)的ID。
_ui.errorsWrapperId = 'parsley-id-' + ('undefined' !== typeof fieldInstance.options.multiple ? 'multiple-' + fieldInstance.options.multiple : fieldInstance.__id__);
新:_ui.errorsWrapperId = 'parsley-id-' + ('undefined' !== typeof fieldInstance.options.multiple ? 'multiple-' + fieldInstance.$element[0].form.id + '-' + fieldInstance.options.multiple : fieldInstance.__id__);
这是正确打印错误信息所必需的
相关文章:
- 当与Dojo验证一起使用时,Chrome 41密码保存会做出错误的选择
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 如何一起显示验证消息
- 让 JavaScript 验证与 PHP 一起使用
- 一段时间后隐藏与 angularjs 表单验证一起显示的错误标签
- 多个 Angular 验证器独立工作,但不能一起工作
- Reg Ex 不会验证我是否将 # 与其他字符或数字一起使用
- 两个 HTML Onsumbit 验证与 Java 一起
- Javascript验证,与表单链接在一起
- Ajax表单-仍然无法使其与验证一起工作
- Knockout.js和敲除验证不能一起工作
- 表单验证不能与progressButton js一起工作
- RegExp用于验证不与数组一起工作的网站URL
- 用户登录身份验证如何与React native一起工作
- knockout.js验证插件不能与CakePHP一起工作
- Rails disable-with不能与jquery验证一起工作
- 奇怪的骨干.与require.js和backbone.stickit一起使用时的验证错误
- Parsley.js -在同一页面上以不同形式具有相同名称的单选按钮将被一起验证
- 是否可以将摘要身份验证与XMLHTTPRequest一起使用?
- jquery Malsup's的表单插件和Ketchup验证一起工作