如何在 Touch UI 中添加强制下拉字段

2023-12-13

我将“必需”添加为“真实”,但它不起作用。 “required”为“true”仅适用于文本字段。

根据下面的文档,我没有看到任何从下拉列表中添加必填字段的选项。http://docs.adobe.com/docs/en/aem/6-0/author/assets/managing-assets-touch-ui/managing-asset-schema-forms.html

怎么可能做到这一点呢?


使用 $.validator.register 注册自定义验证器。

我写了一篇关于编写自定义验证器的详细博客文章:http://www.nateyolles.com/blog/2016/02/aem-touch-ui-custom-validation.

我在 GitHub 上提供了一个全面的 Touch UI 验证库,它修复了您所描述的问题,其中“必需”属性不适用于多个 Granite UI 字段以及其他功能。看https://github.com/nateyolles/aem-touch-ui-validation.

本质上,您需要修改字段的 HTML 以包含 HTML 输入,该输入可以通过覆盖基础组件或在对话框打开时使用 JavaScript 修改 DOM 来验证。隐藏的输入不符合验证条件,因此您需要添加由 CSS 隐藏的文本输入。当组件操作更新时,使用 JavaScript 更新“隐藏”字段。例如,在颜色选择器中选择颜色。

然后,您针对不可见的文本输入注册自定义验证器。传入不可见文本字段的选择器和执行实际验证的函数。还传入用于显示和清除的函数,以显示和隐藏错误消息/图标。

以下示例适用于从我上面链接到的库中获取的颜色选择器:

/**
 * Validation for Granite Touch UI colorpicker.
 *
 * Additional properties for granite/ui/components/foundation/form/colorpicker
 * are:
 *
 * {Boolean}required
 * Is field required
 * defaults to false
 *
 *  <myColorPicker
 *     jcr:primaryType="nt:unstructured"
 *     sling:resourceType="granite/ui/components/foundation/form/colorpicker"
 *     fieldLabel="My colorpicker"
 *     name="./myColorPicker"
 *     required="{Boolean}true"/>
 */
var COLORPICKER_SELECTOR = '.coral-ColorPicker',

$.validator.register({
    selector: '.marker-colorpicker',
    validate: function(el) {
        var field,
            value,
            required;

        field = el.closest(".coral-Form-field");
        value = el.val();
        required = field.data('required');

        if (required && !value) {
            return Granite.I18n.get('Please fill out this field.');
        } else {
            el.setCustomValidity(null);
            el.updateErrorUI();
        }
    },
    show: function (el, message) {
        var fieldErrorEl,
            field,
            error,
            arrow;

        fieldErrorEl = $("<span class='coral-Form-fielderror coral-Icon coral-Icon--alert coral-Icon--sizeS' data-init='quicktip' data-quicktip-type='error' />");
        field = el.closest('.coral-Form-field');

        el.add(field)
           .attr('aria-invalid', 'true')
           .toggleClass('is-invalid', true);

       field.nextAll('.coral-Form-fieldinfo')
           .addClass('u-coral-screenReaderOnly');

       error = field.nextAll('.coral-Form-fielderror');

       if (error.length === 0) {
           arrow = field.closest('form').hasClass('coral-Form--vertical') ? 'right' : 'top';
           fieldErrorEl.clone()
              .attr('data-quicktip-arrow', arrow)
              .attr('data-quicktip-content', message)
              .insertAfter(field);
       } else {
           error.data('quicktipContent', message);
       }
   },
   clear: function(el) {
       var field = el.closest('.coral-Form-field');

       el.add(field)
          .removeAttr('aria-invalid')
         .removeClass('is-invalid');

       field.nextAll('.coral-Form-fielderror').tooltip('hide').remove();
       field.nextAll('.coral-Form-fieldinfo').removeClass('u-coral-screenReaderOnly');
    }
});

/**
 * Create hidden field to validate against and click event handler when a
 * Granite UI dialog loads.
 */
 $(document).on('foundation-contentloaded', function(e) {
     var $dialog,
         $radioGroups;

    $dialog = $(e.target);
    $radioGroups = $dialog.find(COLORPICKER_SELECTOR);

    $radioGroups.each(function() {
        var $radioGroup,
            required,
            $marker,
            $button;

        $radioGroup = $(this);
        required = $radioGroup.data('required');

        if (required) {
            $marker = $radioGroup.find('input[type="hidden"]');
            $button = $radioGroup.find('.coral-ColorPicker-button')

            /* Change to text as hidden is not validated */
            $marker.attr('type', 'text');
            $marker.addClass('marker-colorpicker');
            $marker.attr('aria-required', 'true');

            /* revalidate once the button color has changed */
            $button.on('stylechange', function(){
                $marker.trigger('change');
            });
        }
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Touch UI 中添加强制下拉字段 的相关文章

  • 我可以获得特定词典的完整 i18n 标签吗

    我面临 i18n 标签的问题 我的应用程序使用 Granite I18n get 函数在 js 前端读取一些 i18n 标签 整个字典下载为 libs cq i18n dict locale json 如 etc clientlibs fo
  • 将 CQ5 组件设置为可编辑或不可编辑

    如果我想设置 cq5 组件在页面 A 中可编辑 但在页面 B 中不可编辑 是否可以 例如 在页面 A 我有 C 组件 我们允许作者打开对话框并编辑组件 但我们不允许作者打开对话框来编辑页面 B 上的组件 C 我尝试研究 cq EditCon
  • 如何在 cq 5.5 中配置 antisamy?

    我有 cq 5 5 项目 我想防止 XSS 攻击 根据这个linkcq 提供与 AntiSamy 项目的集成 请提供与 AntiSamy 集成的具体步骤 因为我真的找不到它 update 我应该在某个地方写这样的代码吗 import org
  • CQ5 中的 标签被替换为 标签

    我在用着富文本编辑器 with 杂项工具插件来编辑我的网站中的文本 但是当我打开 HTML 编辑器并创建这样的东西时 p strong Strong text strong p CQ立即将其重写为 p b Strong text b p 是
  • AEM/CQ:装饰标签上的条件 CSS 类

    如何在 AEM6 Sightly 组件的包装装饰标签上动态设置 CSS 类 我无法在组件上设置此 CSS 类 因为它取决于组件的实例 并且我无法在资源上设置它 因为资源可以在多个页面上呈现 并且 CSS 类根据它所在的页面而有所不同 我在
  • 获取 .model.json 作为字符串

    我想知道是否有一种简单的方法可以通过 AEM 中的 sling 内容导出器的结果获取字符串 在我当前的用例中 我需要组件的 htl 文件中的组件 model json 输出的内容 并且发送额外的请求显然不是一个好主意 关于如何获取数据有任何
  • 如何根据cq5中的路径创建目录?

    我有一个字符串 例如页面的路径 content xperia public events eventeditor 我正在生成此页面的 XML 并将其保存到 DAM 但我想将其保存在类似的树结构中 content 我尝试了以下代码 Strin
  • AEM 如何解析 JSON 扩展?

    在 CQ 中 如果我请求诸如localhost 4502 content geometrixx en json 我会获取 JSON 格式的节点信息 这同样适用于 XML 扩展 我的问题是 如果URL扩展名是 那么节点信息以JSON格式呈现是
  • 如何为 Sling 资源实现自定义 AdapterFactory?

    Adobe AEM 软件提供了几个类 它们可以采用 apache Sling 资源并将其适应另一个类 如下所示 Page page resource adaptTo Page class 要将此语法与您编写和控制的类一起使用 这可以归结为简
  • 在 cq5/AEM 中创建自定义 MIME 类型

    我需要在 cq5 AEM 中添加对专有 3D 格式的支持 尽管完全没有这方面的经验 我还是设法生成了一些工作组件来可视化资产 但现在 我需要创建自定义媒体处理程序以从模型生成再现和缩略图 问题是 媒体处理程序只能处理特定 MIME 类型的资
  • Jackrabbit 跨连接节点进行搜索

    我已经在 J ackrabbit 存储库中标记了对象 实际上是 Adob e Day CQ 的 CRX 但我认为这是 Jackrabbit 代码 asset tags A B 子资产数据1 标签 A C E 子资产数据2 标签 D E 我想
  • AEM CQ 与 JPA(休眠)

    我正在使用 Adob e Experience Manager AEM 6 4 Service Pack 1 和 Forms Package 我有很多扩展的属性 属性 所以我制作了一个数据库图 我不想将所有其他内容保存在 crx 中 我想将
  • 禁用自动添加

    标记

    我正在尝试删除自动添加 p CQ5 版本5 6 0 20130125 中的标签 我尝试将这些属性添加到文本组件 http dev day com docs en cq current widgets api index html class
  • 在Angular2中动态加载HTML模板

    我使用创建了一个项目angular cli其中包含应用组件如下 import Component from angular core Component selector app root templateUrl app component
  • 如何在使用 X 类型浏览字段浏览时隐藏某些路径?

    在我的组件对话框中 我使用browsefieldXType 使用户能够浏览页面树并选择页面
  • Apache Sling 中的 resourceResolver.adaptTo(Session.class) 的用途是什么?

    我是 Apache Sling CQ5 等的新手 在我们的代码库中 我们有一个与此类似的代码片段 void perform SlingHttpServletRequest request SlingHttpServletResponse r
  • ResourceResolverFactory getServiceResourceResolver 在 AEM 6.1 中抛出异常

    我想向 AEM 写入一些数据 下面的代码在 AEM 6 0 中工作正常 但在 AEM 6 1 中不行 总是抛出登录异常 如下所示 获取服务的 CRX 用户时出现登录异常 writeService org apache sling api r
  • 添加超过 8 个项目时,AEM ACS Commons 通用列表编辑器会中断

    ACS 共享版本 5 0 6AEM 版本 6 5 8 0 我试图通过单击缩略图 然后单击顶部操作栏中的 属性 来编辑 http localhost 4502 generic lists html etc acs commons lists
  • 从我的本地计算机附加文件以在 cq/AEM 中发送邮件

    我正在学习 AEM 并且正在满足一个要求 其中我能够发送电子邮件 但无法添加从我的计算机浏览的附件 要求 有一个用 HTML 制作的表单 可以从其中收集信息 并且有一个浏览按钮 可以从其中上传文件 文件上传后 应立即将包含表单内容和附件的电
  • jcr:primaryType 和 jcr:mixinTypes 有什么区别?

    我只是想知道 jcr primaryType 和 jcr mixinTypes 之间有什么区别 以及为什么使用 jcr mixinTypes 它意味着什么 如果您检查 crx 中的 content dam 文件夹 它会显示 jcr prim

随机推荐

  • 为什么单元测试中的代码无法找到捆绑资源?

    我正在单元测试的一些代码需要加载资源文件 它包含以下行 NSString path NSBundle mainBundle pathForResource foo ofType txt 在应用程序中它运行得很好 但是当由单元测试框架运行时p
  • Cross-Origin-Embedder-Policy:如何仅允许某些域?

    在网站上 我必须在网站上嵌入需要以下标头的 iframe 因为它需要 SharedArrayBuffer 功能 Cross Origin Embedder Policy require corp Cross Origin Opener Po
  • 在 C# 中设置 Azure ACS

    我正在查看几个使用 ACS 的示例 它们确实让我感到愚蠢 我查看了在线教程 似乎我所需要的只是配置中的以下行 httpRuntime requestValidationMode 2 0 但本节中的其他一些例子示例项目SimpleMVC4 的
  • 必需的自定义 WooCommerce 结帐字段不会验证输入的值

    我在店面子主题中添加 WooCommerce 自定义结账字段functions php file 它们具有 必需 属性 目的是让这些字段出现在页面顶部 账单字段之前 当单击 提交 按钮继续付款时 我收到所需的自定义字段验证错误 请填写您的姓
  • Asp.Net MVC:URL 太长的请求和错误处理

    通过检查我的 elmah 日志 我发现我不断收到 网址太长 请求 错误是 System Web HttpException 0x80004005 The length of the URL for this request exceeds
  • 二维数组变量指针混淆

    我对二维数组 C 语言 有一个基本的疑问 考虑二维数组的声明如下 int array 3 5 现在 当我执行以下操作时 以下 printf 的输出是相同的 printf u n array printf u n array 现在尝试以下操作
  • python 中多行和单行字符串文字的优点是什么?

    我知道三引号字符串用作文档字符串 但是真的需要两个字符串文字吗 是否有任何用例可以区分单行和多行 在 Clojure 中 我们有 1 个字符串文字 是多行的 我们将其用作文档字符串 那么为什么Python会有这样的差异呢 必须明确创建多行字
  • 保存对此范围的访问权限

    我将颜色存储在按钮上的数据属性中 我想在切换中使用该颜色 但是 当我尝试使用访问数据信息时this 没有可用数据 我怎样才能保持对正确的访问this scope 我试图只切换不包含 Skip 的元素的给定颜色 html div div
  • 如何在 Excel VBA 表单中嵌入浏览器?

    以前我用过微软的网页浏览器许多 VB6 和 Excel VBA 表单中的控件 我需要再做一次 但我不知道该怎么做 我尝试打开一个旧的 VB6 项目 但收到以下错误消息 Line 17 Class SHDocVwCtl WebBrowser
  • 在虚拟机上自动进行测试,无需图形会话

    语境 我在 Windows 上运行并使用 UFT Ranorex 在虚拟机 很少 上执行自动化 GUI 测试 执行由 Jenkins 进行试点 Problem VM 必须有一个活动的graphic会话 否则 UFT 将不会运行 GUI 测试
  • 在 flutter 中构建应用程序 2 次后构建失败

    在 VS code 中构建我的 flutter 应用程序后 我成功运行了该应用程序 一切正常 但在应用程序重新启动两次或多次后 每当我再次运行代码时 构建都会失败 这是弹出的错误 Target debug android applicati
  • iOS swift NumberFormatter 十进制样式本地化

    我正在与NumberFormatter Style decimal我需要 20000 23 应该是 20 000 23 因为我创建了一个扩展 var NumerWithDecimalPoint String if self let numb
  • mysql 中的 GROUP BY 特性 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有以下 SQL 表和查询 如 sqlfiddle 中所示 http sqlfiddle com 2 37eda 1 0 当前结果如下所示 id definition id serv
  • 列出 Windows 中打开文件句柄的所有者进程?

    我目前在程序的事件查看器中收到 句柄不足 错误 列出哪些进程正在使用文件句柄的好程序是什么 一个例子是 nix 世界中的 lsof 使用流程浏览器 http technet microsoft com en us sysinternals
  • 在 CIFilter 中使用 CIColor 中的 CIImage:获取空图像

    我正在尝试创建一个具有混合模式 如叠加或乘法 的 CIFilter 相关代码 Let s try a filter here Get the data NSData imageData UIImageJPEGRepresentation i
  • 从周数查找一周的开始结束日期

    我使用 servlet 和 JSP 构建了一个 Web 应用程序 并在 Servlet 内计算了周数 private int findWeekNumber String myDate throws ParseException Simple
  • Auto Div 高度取决于另一高度

    我有以下情况我希望 Div2 高度根据 Div3 的内容调整大小 我怎样才能做到这一点 DIV1 DIV2 DIV3
  • Chrome 扩展程序可从脚本中提取文本

    我正在尝试使用 Chrome 扩展的 JS 从脚本标记中提取 webId 22 22 var 字符串 我当前正在使用的示例允许我提取页面标题 payload js chrome runtime sendMessage document ti
  • 根据另一个数据框更改数据框的值

    我再次需要您的帮助来解决一个对于初学者 R 用户来说不太清楚的可能简单的问题 我需要操作一个数据框来替换NA值由 现实 的值来满足另一个应用程序 数据帧包含 3 0 的值 这是原始数据库中无效值的标志 我需要的是用来自另一个数据帧的数据替换
  • 如何在 Touch UI 中添加强制下拉字段

    我将 必需 添加为 真实 但它不起作用 required 为 true 仅适用于文本字段 根据下面的文档 我没有看到任何从下拉列表中添加必填字段的选项 http docs adobe com docs en aem 6 0 author a
Powered by Hwhale