用于表单的Adobe PDF JavaScript:If ... else语句中的分组条件 [英] Adobe PDF JavaScript for Forms: Grouping conditions from If...else statement

查看:90
本文介绍了用于表单的Adobe PDF JavaScript:If ... else语句中的分组条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在设计PDF格式的表格,并使用JavaScript验证用户输入,并且根据用户选择,文档上会出现不同的标签.请参考下面的示例代码:

I am designing forms in PDF and validating user input using JavaScript and depending on the user selection different labels appear on the document. Please refer to my sample code below:

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个不同的变量中对所有这组国家进行分组或声明,然后在需要时仅调用单个变量?

My current issue is that each of this || - has between 20 to 90 Countries. Currently I have 4 different sets of Countries. My question is there any way to group or declare all this sets of countries within 4 different variables, and then just call single variable when required?

我想要的结果可能是这样的,但是我并不完全确定该如何完成,下面的代码不起作用,只是为了说明目的以反映想要的结果:

My desired outcome would of been something like this, however I am not entirely sure how to accomplish, below code does not work, just for illustration purpose to reflect desired outcome:

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;          
 }

这也是我用来向用户提出初始问题的下拉字段,具体取决于他们的答案.进一步的下拉字段将变得可见.

Also here is the dropdown fields I am using to ask users initial questions, depending on their answers further dropdown fields will become visible.

下面是我当前保存代码的文本字段,正如我在下面的评论中已经提到的那样,我的所有代码当前都可以正常工作,但是由于代码大小限制,每个文本字段都可以容纳,我不得不拆分代码在3个文本字段之间进行编码,但是我遇到的问题是,我无法拆分一些深度嵌套的if...else语句,因此,我需要按国家/地区分组来缩小代码长度.

Below are text fields where I currently keep my code, as I already stated in my comments below, all my code currently works fine, however due to the code size limits, each of the text fields can hold, I had to split code between 3 text fields, however I have encountered problem where, I am not able to split some of the deeply nested if...else statements, hence I am asking for help to shrink my code, by grouping countries.

推荐答案

这样的事情怎么样?它可能需要进行一些调整,而我尚未测试过,但是基本上您想创建一个数据结构,该结构将允许您以相同的方式通用地处理每种情况.

What about something like this? It may need some adjustments and I haven't tested, but basically you want to create a data structure that will allow you to generically handle every scenarios the same way.

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

Using objects as maps here rather than arrays to hold countries is just an optimization that would make the country lookup faster, but it's probably not necessary.

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;
            });
    }
}

如您所见,糖和磨粉&玉米和土豆我都一样 国家的顺序,所以我希望以某种方式将它们分组 阻止我一次又一次地重复它们

As you can see for sugar and wheet & corn and potatoes I have the same sequence of countries, so I was hoping to group them somehow to prevent me from repeating them again and again

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

You could just do the following and use the same approach as above:

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

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

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

要使代码更小,可以从数组动态创建映射:

To make the code smaller you may create maps dynamically from arrays:

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


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

这篇关于用于表单的Adobe PDF JavaScript:If ... else语句中的分组条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆