You need to enable JavaScript to run this app. Acrobat PDF表单JavaScript开发:如何编写可复用的字段必填设置函数
优惠活动
大模型
产品
解决方案
定价
更多

Acrobat PDF表单JavaScript开发:如何编写可复用的字段必填设置函数

错误原因

你代码无法运行的核心问题有两个:

  1. 传参时的两层引号写法错误:getField的入参是字段名的字符串本身,不需要额外包裹引号。你传入'"sidewalkAsphalt"'相当于把双引号也作为了字段名的一部分,系统找不到匹配的字段自然无法生效。
  2. 原设想的通用函数参数固定为4个,无法适配不同数量的字段组,扩展性很差。

正确实现方案

你可以编写一个支持任意数量字段的通用属性设置函数,还可以加入容错判断避免字段不存在时脚本报错:

function setFieldsRequired(isRequired, fieldNameList) {
    for (var i = 0; i < fieldNameList.length; i++) {
        var targetField = this.getField(fieldNameList[i]);
        // 字段存在才修改属性,避免拼写错误/字段删除导致报错
        if (targetField) {
            targetField.required = isRequired;
        }
    }
}

调用时直接传入必填状态和字段名数组即可:

  • 设置人行道字段为必填:
if (this.getField("sidewalkNone").value == "Off") {
    setFieldsRequired(true, ["sidewalkAsphalt", "sidewalkConcrete", "sidewalkPavers", "sidewalkCondition"]);
}
  • 设置人行道字段为非必填:
if (this.getField("sidewalkNone").value == "Yes") {
    setFieldsRequired(false, ["sidewalkAsphalt", "sidewalkConcrete", "sidewalkPavers", "sidewalkCondition"]);
}

优化建议

如果有大量固定的字段组,可以提前把各组字段名定义为常量,避免重复拼写出错,调用也更简洁:

// 提前统一定义所有字段组
var WALKWAY_FIELDS = ["sidewalkAsphalt", "sidewalkConcrete", "sidewalkPavers", "sidewalkCondition"];
var DRIVEWAY_FIELDS = ["drivewayAsphalt", "drivewayConcrete", "drivewayWidth", "drivewayCondition"];
var PARKING_FIELDS = ["parkingAsphalt", "parkingSpaceCount", "parkingHandicap"];

// 后续调用只需传入对应常量
if (this.getField("drivewayNone").value == "Off") {
    setFieldsRequired(true, DRIVEWAY_FIELDS);
}
if (this.getField("parkingNone").value == "Yes") {
    setFieldsRequired(false, PARKING_FIELDS);
}

内容的提问来源于stack exchange,提问作者Christopher Ansbaugh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 08:57:03