本文详解如何在 acrobat javascript 中,根据签名字段所在页码,精准地将当前页及之前所有页面上的指定字段(如 "kvial"、"mvial")设为只读,避免误锁后续页面字段。
在 Adobe Acrobat 表单自动化中,常需实现“签名即锁定”的交互逻辑:当用户在某页完成电子签名后,自动将该页及之前所有页面的表单字段设为只读,防止后续修改。但原代码存在两个关键问题:
✅ 正确思路是:先按页码筛选(field.page 。
以下是推荐的健壮实现方案:
// 获取触发事件的签名字段所在页码(注意:page 属性从 0 开始计数)
var currentPageNum = event.target.page;
// 遍历文档中所有字段
for (var i = 0; i < this.numFields; i++) {
var field = this.getField(this.getNthFieldName(i));
if (!field) continue; // 跳过无效字段
// 仅处理当前页及之前页面的字段
if (field.page <= currentPageNum) {
// 统一设为只读(含 office 字段)
field.readonly = true;
this.getField("office")?.readonly = true;
// 针对跨页的 kvial/mvial 字段:仅当其位于「之前页面」(非当前页)时额外确认
// (当前页字段已在上面通用逻辑中处理,此处强化语义)
if (field.page < currentPageNum) {
var name = field.name;
if (name.endsWith("kvial") || name.endsWith("mvial")) {
field.readonly = true; // 显式确保
}
}
}
}
// 【可选】补充批量设置(适用于命名规则严格、页码前缀明确的场景)
// 注意:此循环仅在字段名形如 "1kvial", "2mvial" 等时有效;若字段已按页组织,优先使用上方动态遍历逻辑
for (var j = 1; j <= 15; j++) {
var kvialField = this.getField(j + "kvial");
var mvialField = this.getField(j + "mvial");
if (kvialField && kvialField.page <= currentPageNum) kvialField.readonly = true;
if (mvialField && mvialField.page <= currentPageNum) mvialField.readonly = true;
}
// 显示区块(如提示框)
this.getField("block")?.display = display.visible;? 关键注意事项:

通过以上结构化逻辑,即可精准实现「签名页及之前页面字段只读」的业务需求,兼顾健壮性与可维护性。