Javascript Acrobat 中的函数参数

Javascript function parameters in Acrobat

希望大家不要因为这么一个看似简单的问题而生我的气..

基本上,我有一个用 javascript 编写脚本的 PDF 表单。

我有一堆复选框,我想根据其他输入设置为必需 and/or 不需要,我正在尝试尽可能少地重复代码,尤其是因为有大量输入.

现在,我能完成我正在尝试的最好方法是为每个输入实例设置一个函数,如下所示:

function setWalkwayNotRequired() {
    this.getField("sidewalkAsphalt").required = false;
    this.getField("sidewalkConcrete").required = false;
    this.getField("sidewalkPavers").required = false;
    this.getField("sidewalkCondition").required = false;
}

然后我会根据某个复选框的输入调用此函数:

if (this.getField("sidewalkNone").value == "Yes") {
    setSidewalkNotRequired();
}

那么上面提到的所有字段都将设置为不需要。

我觉得应该有一种方法可以创建单个“setRequired”或“setNotRequired”函数来获取相关字段的参数。

在我看来应该是这样的:

function setRequired(a, b, c, d) {
    this.getField(a).required = true;
    this.getField(b).required = true;
    this.getField(c).required = true;
    this.getField(d).required = true; 
}

然后我会为所有实例调用该函数,例如人行道(如上所示)或车道等,如下所示:

if (this.getField("sidewalkNone").value == "Off") {
   setRequired('"sidewalkAsphalt"', '"sidewalkConcrete"', '"sidewalkPavers"', '"sidewalkCondition"');
}

同样,在我看来,一旦函数被调用,基于上述代码的输出将类似于:

if (this.getField("sidewalkNone").value == "Off") {
    this.getField("sidewalkAsphalt").required = true;
    this.getField("sidewalkConcrete").required = true;
    this.getField("sidewalkPavers").required = true;
    this.getField("sidewalkCondition").required = true;
}

按照我在第一个代码块中的方式进行操作需要我为每组复选框创建单独的函数,从而在一个已经很大的文件中创建大量代码。第二种方法允许我一遍又一遍地使用 1 个函数,根据我在 PDF 中的位置将字段名称作为参数。

我也不太清楚声明参数是否合法,就像我对“...”引号所做的那样;我这样做是因为我需要 this.getField().

中的双引号

再次,如果这是新手,我很抱歉,我一直在尝试使用代码一段时间,但无法让它工作。

任何输入都会很棒。

您可以只传入 Array 个字段名称:

function setRequired( fieldNames, isRequired = true ) {

    for( var i = 0; i < fieldNames.length; i++ ) {
        var fieldName = fieldNames[i];
        this.getField( fieldName ).required = isRequired;
    }
}

用法:

if( this.getField("sidewalkNone").value == "Off" ) {
   setRequired( [ "sidewalkAsphalt", "sidewalkConcrete", "sidewalkPavers", "sidewalkCondition" ] );
}

如果您使用带点符号的分层命名,您可以在父项上设置属性以影响所有子项。例如,如果您将字段命名为“sidewalk.Asphalt”、“sidewalk.Concrete”和“sidewalk.Pavers”...

this.getField("sidewalk").required = true;

... 将设置所有子项为必填项。