我正在使用Liferay 6.2和使用AUI taglib的内置表单验证器,即:
<aui:input ... >
...
<aui:validator name="number" errorMessage="Enter number" />
</aui:input>
有没有办法通过JavaScript在运行时(显示portlet之后)禁用和重新启用验证?
我想到的唯一解决方案是将所有验证器重新实现为具有相同功能和开/关开关的自定义验证器 - 这看起来很多工作。
答案 0 :(得分:1)
我确实使用建议的方法将验证器重新实现为自定义验证器,这不是一项太大的工作,但不必这样做真的很棒。
深入了解一些liferay组件,我发现Liferay.auto_field确实删除了验证器并在需要时将其添加回来。执行此操作的代码如下所示:(https://github.com/liferay/liferay-portal/blob/master/portal-web/docroot/html/js/liferay/auto_fields.js#L219)
var errors = formValidator.errors;
rules = formValidator.get('rules');
node.all('input, select, textarea').each(function(item, index) {
var name = item.attr('name') || item.attr('id');
if (rules && rules[name]) {
deletedRules[name] = rules[name];
delete rules[name];
}
if (errors && errors[name]) {
delete errors[name];
}
});
我没有尝试自己做,但这应该有效。需要注意的是,要获得所需的formValidator(可以在https://github.com/liferay/liferay-portal/blob/master/portal-web/docroot/html/js/liferay/auto_fields.js#L501上看到)
Liferay.Form.get(formId).formValidator