Acrobat中的Javascript函数参数

Acrobat中的Javascript函数参数,javascript,pdf,Javascript,Pdf,希望你们不要因为这么简单的问题而生我的气 基本上,我有一个PDF表单,我正在用javascript编写脚本 我有一大堆复选框,我想根据其他输入设置required和/或not required,我正试图尽可能少地重复代码,特别是因为有大量的输入 现在,我能完成我尝试的最好方法是为每个输入实例设置一个函数,如下所示: function setWalkwayNotRequired() { this.getField("sidewalkAsphalt").required

希望你们不要因为这么简单的问题而生我的气

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

我有一大堆复选框,我想根据其他输入设置required和/或not required,我正试图尽可能少地重复代码,特别是因为有大量的输入

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

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();
}
然后,上述所有字段都将设置为not required

我觉得应该有一种方法来创建一个“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()中的双引号

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


任何输入都会令人惊讶。

您只需传入一个
字段名数组即可:

function setRequired( fieldNames, isRequired = true ) {

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

如果使用带点表示法的分层命名,则可以在父对象上设置影响所有子对象的属性。例如,如果将字段命名为“人行道.沥青”,“人行道.混凝土”和“人行道.摊铺机”


。。。将设置所有子项为必需的。

您知道目标Acrobat/PDF的最低版本支持的ECMAScript的最高版本是什么吗?使用ES2015+功能会使事情变得更简单,但较旧的PDF查看器或较旧版本的Acrobat不支持。我不支持,但我知道它不允许您使用let变量。如果它“不允许您使用let变量”,那么它就不是JavaScript。你从哪里弄明白的?我试过的时候就是不起作用。当然是JS。老兄,非常感谢你,我就知道这很简单!有趣,这也很有帮助。谢谢
if( this.getField("sidewalkNone").value == "Off" ) {
   setRequired( [ "sidewalkAsphalt", "sidewalkConcrete", "sidewalkPavers", "sidewalkCondition" ] );
}
this.getField("sidewalk").required = true;