【问题标题】:Liferay: Controlling form validators at runtime via JavaScriptLiferay:通过 JavaScript 在运行时控制表单验证器
【发布时间】:2014-10-07 03:58:35
【问题描述】:

我正在使用 Liferay 6.2 和使用 AUI taglib 的内置表单验证器,即:

<aui:input ... > 
    ... 
    <aui:validator name="number" errorMessage="Enter number" />
</aui:input>

有没有办法通过 JavaScript 在运行时(显示 portlet 之后)禁用和重新启用验证?

我想到的唯一解决方案是将所有验证器重新实现为具有相同功能和开/关开关的自定义验证器 - 这看起来需要做很多工作。

【问题讨论】:

    标签: validation liferay


    【解决方案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
    

    【讨论】:

    • 谢谢。将在接下来的几天内尝试并告诉您结果。
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多