用于表单的Adobe PDF JavaScript:从If ... else语句

时间:2016-06-04 20:12:59

标签: javascript forms pdf adobe

我正在使用PDF设计表单并使用JavaScript验证用户输入,并根据用户选择在文档上显示不同的标签。请参阅下面的示例代码:

var countryofgrowth = this.getField("countryofgrowth").value;
var countryofgrowth = this.getField("sugarquality").value;
var countryofgrowth = this.getField("sugarQualitylevelhigh").value;
var countryofgrowth = this.getField("cornquantitymax").value;
var countryofgrowth = this.getField("cornquantity").value;
var type = this.getField("type").value;

if ((type == "sugar") && (countryofgrowth == "Afghanistan [AF]" || countryofgrowth == "Albania [AL]" || countryofgrowth == "Algeria [DZ]" || countryofgrowth == "Angola [AO]" || countryofgrowth == "Argentina [AR]" || ……) )
{
       getField("sugarlabel").display=display.visible;
       getField("goodsugar").display=display.hidden;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;
}
else if ((type == "sugar") && (countryofgrowth == "Australia [AU]" || countryofgrowth == "Belgium [BE]" || countryofgrowth == "Canada [CA]" || countryofgrowth == "Czech Republic [CZ]" || countryofgrowth == "Denmark [DK]" || …..))
{
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.visible;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;   
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;          

    if (sugarquality == "Low Quality")
    {
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.visible;
       getField("sugarQualitylevellow").display=display.visible;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;
    }
    else if (sugarquality == "High Quality")
    {
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.visible;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.visible;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;

       if (sugarQualitylevelhigh == " More than 75%")
        {
        	getField("sugarlabel").display=display.hidden;
            getField("sugarquality").display=display.visible;
            getField("sugarQualitylevellow").display=display.hidden;
            getField("sugarQualitylevelhigh").display=display.visible;
            getField("sugarQualitylevelhighmorethan75").display=display.visible;
            getField("sugarQualitylevelhighlessthan75").display=display.hidden;
            getField("cornquantity").display=display.hidden;
            getField("cornquantitymorethan500").display=display.hidden;
            getField("cornquantitymax").display=display.hidden;
            getField("cornquantitymaxyes").display=display.hidden;
            getField("cornquantitymaxno").display=display.hidden;
        }
        else if (sugarQualitylevelhigh == "Less than 75%")
        {
            getField("sugarlabel").display=display.hidden;
            getField("sugarquality").display=display.visible;
            getField("sugarQualitylevellow").display=display.hidden;
            getField("sugarQualitylevelhigh").display=display.visible;
            getField("sugarQualitylevelhighmorethan75").display=display.hidden;
            getField("sugarQualitylevelhighlessthan75").display=display.visible;
            getField("cornquantity").display=display.hidden;
            getField("cornquantitymorethan500").display=display.hidden;
            getField("cornquantitymax").display=display.hidden;
            getField("cornquantitymaxyes").display=display.hidden;
            getField("cornquantitymaxno").display=display.hidden;
        }
    }
}
else if ((type == "Corn") && (countryofgrowth == "Aland Islands [AX]" || countryofgrowth == "Alderney" || countryofgrowth == "American Samoa [AS]" || countryofgrowth == "Andorra [AD]" || countryofgrowth == "Anguilla [AI]" || countryofgrowth == "Antarctica [AQ]" || ……))
{
      getField("sugarlabel").display=display.hidden;
      getField("sugarquality").display=display.hidden;
      getField("sugarQualitylevellow").display=display.hidden;
      getField("sugarQualitylevelhigh").display=display.hidden;
      getField("sugarQualitylevelhighmorethan75").display=display.hidden;
      getField("sugarQualitylevelhighlessthan75").display=display.hidden;  
      getField("cornquantity").display=display.visible;
      getField("cornquantitymorethan500").display=display.hidden;
      getField("cornquantitymax").display=display.hidden;
      getField("cornquantitymaxyes").display=display.hidden;
      getField("cornquantitymaxno").display=display.hidden;

    if (cornquantity == "More than 500t")
    {
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.hidden;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.visible;
       getField("cornquantitymorethan500").display=display.visible;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;
    }
    else if (cornquantity == "More than 1000t")
    {
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.hidden;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.visible;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.visible;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;

        if (cornquantitymax == "Yes")
        {
        	getField("sugarlabel").display=display.hidden;
            getField("sugarquality").display=display.hidden;
            getField("sugarQualitylevellow").display=display.hidden;
            getField("sugarQualitylevelhigh").display=display.hidden;
            getField("sugarQualitylevelhighmorethan75").display=display.hidden;
            getField("sugarQualitylevelhighlessthan75").display=display.hidden;
            getField("cornquantity").display=display.visible;
            getField("cornquantitymorethan500").display=display.hidden;
            getField("cornquantitymax").display=display.visible;
            getField("cornquantitymaxyes").display=display.visible;
            getField("cornquantitymaxno").display=display.hidden;
        }
        else if (cornquantitymax == "No")
        {
            getField("sugarlabel").display=display.hidden;
            getField("sugarquality").display=display.hidden;
            getField("sugarQualitylevellow").display=display.hidden;
            getField("sugarQualitylevelhigh").display=display.hidden;
            getField("sugarQualitylevelhighmorethan75").display=display.hidden;
            getField("sugarQualitylevelhighlessthan75").display=display.hidden;
            getField("cornquantity").display=display.visible;
            getField("cornquantitymorethan500").display=display.hidden;
            getField("cornquantitymax").display=display.visible;
            getField("cornquantitymaxyes").display=display.hidden;
            getField("cornquantitymaxno").display=display.visible;
        }
    }
}

我目前的问题是每个|| - 都有20到90个国家/地区。目前我有4组不同的国家。我的问题是有没有办法在4个不同的变量中分组或声明所有这些国家/地区,然后在需要时调用单个变量?

我希望的结果会是这样的,但是我不完全确定如何完成,下面的代码不起作用,只是为了说明目的以反映所需的结果

var countryofgrowth = this.getField("countryofgrowth").value;
var countryofgrowth = this.getField("sugarquality").value;
var countryofgrowth = this.getField("sugarQualitylevelhigh").value;
var countryofgrowth = this.getField("cornquantitymax").value;
var countryofgrowth = this.getField("cornquantity").value;
var type = this.getField("type").value;

var Highriskcountries = ["Afghanistan [AF]", "Albania [AL]", "Algeria [DZ]", "Angola [AO]", "Argentina [AR]", .....];

var Lowriskcountries = ["Australia [AU]", "Belgium [BE]", "Canada [CA]", "Czech Republic [CZ]", "Denmark [DK]", .....];

var Mediumriskcountries = ["Aland Islands [AX]", "Alderney", "American Samoa [AS]", "Andorra [AD]", "Anguilla [AI]", "Antarctica [AQ]", .....];

var Acceptablecountries = ["Aland Islands [AX]", "Alderney", "American Samoa [AS]", "Andorra [AD]", "Anguilla [AI]", "Antarctica [AQ]", "Australia [AU]", "Belgium [BE]", "Canada [CA]", "Czech Republic [CZ]", "Denmark [DK]", .....];

if ((type == "sugar") && (countryofgrowth == Highriskcountries))
{
       getField("sugarlabel").display=display.visible;
       getField("goodsugar").display=display.hidden;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;
}
else if ((type == "sugar") && (countryofgrowth == Lowriskcountries))
{
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.visible;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;   
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;          
 }

此处还有我用来询问用户初始问题的下拉字段,具体取决于他们的答案,其他下拉字段将变为可见。

enter image description here

下面是我目前保留代码的文本字段,正如我在下面的评论中所说的,我的所有代码目前工作正常,但由于代码大小限制,每个文本字段都可以保存,我不得不拆分3个文本字段之间的代码,但是我遇到了问题,我无法拆分一些深层嵌套的if...else语句,因此我要求通过对国家进行分组来缩小我的代码。

enter image description here

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样?它可能需要一些调整,我还没有经过测试,但基本上你想要创建一个数据结构,这将允许你以相同的方式一般地处理每个场景。

在这里使用对象作为地图而不是数组来保存国家只是一种优化,可以使国家查找更快,但可能没有必要。

var fieldKeys = ['sugar', 'corn', 'wheet', 'potatoes'];
var fields = fieldKeys.reduce(function (res, type) {
    res[type] = getField(type + 'label');
    return res;
}, {});

var countriesByType = {
    sugar: {
        'Afghanistan': true,
        'Albania': true
    },
    corn: {
        'Australia': true,
        'Belgium': true
    }
};

updateFieldsVisibility({ type: 'corn', country: 'Albania' });

function updateFieldsVisibility(selection) {
    var countries = countriesByType[selection.type];

    hideOtherTypeFields();

    fields[selection.type].display = display[countries[selection.country]? 'visible' : 'hidden'];

    function hideOtherTypeFields() {
        fieldKeys
            .filter(function (field) {
                return field != selection.type;
            })
            .forEach(function (field) {
                fields[field].display = display.hidden;
            });
    }
}
  

正如你所看到的糖和小麦&玉米和土豆我也一样   国家的序列,所以我希望以某种方式将它们分组   阻止我一次又一次地重复它们

您可以执行以下操作并使用与上述相同的方法:

var sugarAndWheatCountries = {
    'Afghanistan': true,
    'Albania': true,
    ...
};

var cornAndPotatoesCountries = {
    'Australia': true,
    'Belgium': true,
    ...
};

var countriesByType = {
    sugar: sugarAndWheatCountries,
    wheat: sugarAndWheatCountries,
    corn: cornAndPotatoesCountries,
    potatoes: cornAndPotatoesCountries
};

要使代码更小,您可以从数组动态创建地图:

var sugarAndWheatCountries = mapFromStringArray(['Afghanistan', 'Albania', ...]);


function mapFromStringArray(arr) {
    return arr.reduce(function (acc, str) {
        acc[str] = true;
        return acc;
    }, {});
}