用于表单的Adobe PDF JavaScript:If ... else语句中的分组条件 [英] Adobe PDF JavaScript for Forms: Grouping conditions from If...else statement
问题描述
我正在设计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屋!