Acrobat PDF表单JavaScript开发:如何编写可复用的字段必填设置函数
错误原因
你代码无法运行的核心问题有两个:
- 传参时的两层引号写法错误:
getField的入参是字段名的字符串本身,不需要额外包裹引号。你传入'"sidewalkAsphalt"'相当于把双引号也作为了字段名的一部分,系统找不到匹配的字段自然无法生效。 - 原设想的通用函数参数固定为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
相关产品推荐
相关产品推荐

