如何在AEM中创建弹窗以提醒用户检查表单未作答问题
Adobe Experience Manager Designer 保存前弹窗校验未答字段实现方案
完全可以实现该需求,你可以通过绑定表单预保存事件的自定义校验逻辑完成,具体操作步骤如下:
- 第一步:打开目标表单设计文件,选中顶层表单根节点,切换到「脚本编辑器」面板,事件选择
preSave(预保存触发),脚本语言设置为JavaScript。 - 第二步:编写字段遍历校验逻辑,筛选所有需要校验的下拉框(字段类型
dropDownList)和复选框(字段类型checkButton),判断是否未作答:- 下拉框未作答判定:
rawValue为null或空值,即用户未选择任何选项 - 复选框未作答判定:
rawValue为0或null,即用户未勾选该选项
- 下拉框未作答判定:
- 第三步:收集所有未作答的字段名称,若存在未完成字段,调用
xfa.host.messageBox弹出提示框,同时终止当前保存事件,避免未校验完成的文档被保存。
参考校验代码示例
var unAnswered = []; // 遍历表单所有字段,需将xfa.form.form1替换为你的表单根节点名称 for (var i = 0; i < xfa.form.form1.nodes.length; i++) { var field = xfa.form.form1.nodes.item(i); // 仅校验标记为必填的字段,可根据需求修改判断条件 if (field.mandatory !== "error") continue; // 校验下拉框 if (field.className === "dropDownList" && (!field.rawValue || field.rawValue === "")) { unAnswered.push(field.assist.toolTip.value || "未标识的下拉框字段"); } // 校验复选框 if (field.className === "checkButton" && (field.rawValue == 0 || !field.rawValue)) { unAnswered.push(field.assist.toolTip.value || "未标识的复选框字段"); } } // 存在未答字段时弹窗阻止保存 if (unAnswered.length > 0) { var tip = "请先完成以下必填项后再保存:\n" + unAnswered.join("\n"); xfa.host.messageBox(tip, "表单未完成", 0, 48); event.preventDefault(); return false; }
注意事项
- 如果你的表单存在多层子面板、分页结构,需要调整遍历逻辑覆盖所有层级的字段,避免遗漏校验
- 若不需要仅校验必填字段,可删除
mandatory相关的判断条件,直接校验所有下拉框和复选框即可 - 可自行调整
xfa.host.messageBox的参数修改弹窗的按钮类型、提示图标样式
内容的提问来源于stack exchange,提问作者Chris Schaeuble
相关产品推荐
相关产品推荐

