2016-06-04 2 views
0

Я разрабатываю формы в формате PDF и проверяю вход пользователя с использованием JavaScript и в зависимости от выбора пользователя в документе появляются разные ярлыки. Пожалуйста, обратитесь к моему пример кода ниже:Adobe PDF JavaScript для форм: группировка условий из инструкции If ... else

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%") 
 
     { 
 
     \t 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") 
 
     { 
 
     \t 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

+0

Может ли кто-нибудь помочь внизу, любая помощь будет высоко оценена. – o0Lucky0o

ответ

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

Как вы можете видеть на сахар и wheet & кукуруза и картофель у меня такая же последовательность стран, поэтому я надеялся, сгруппировать их как-то мешает мне повторять их снова и снова

Вы можете просто сделать следующее и использовать тот же подход, что и выше:

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; 
    }, {}); 
} 
+0

Спасибо за ваш быстрый ответ, к сожалению, я недостаточно продвинутый в JavaScript (и любом другом языке программирования), и, пожалуйста, исправьте меня, если я полностью ошибаюсь и не понял ваш код, но я думаю, что на самом деле я бы не решил свою проблему. Из того, что я могу видеть в следующей части кода: 'вар countriesByType = { сахара: { 'Афганистан': правда, 'Албания': истинный }, кукурузы: { 'Australia': правда, 'Belgium': true } ' – o0Lucky0o

+0

Мне все равно нужно будет повторить все страны для всех сценариев. Как вы можете видеть, для сахара и пшеницы, кукурузы и картофеля у меня одинаковая последовательность стран, поэтому я надеялся как-то их сгруппировать, чтобы я не повторил их снова и снова. Я пытался сгруппировать их вместе с помощью 'array', но я изо всех сил пытаюсь понять, как сделать 4 цикла для каждой последовательности. Не могли бы вы предложить что-то еще? – o0Lucky0o

+0

Спасибо за это еще раз, но я не должен упоминать, извините, что я плохой, что я не могу группировать кукурузу, картофель, wheet и сахар, поскольку они очень индивидуальные сценарии со многими уровнями утверждений if и else под ними, поэтому я было просто посмотреть, как можно группировать только страны. Tonigh Я могу опубликовать свой код «array», возможно, вы сможете мне помочь, или, возможно, вы сможете предложить любое другое решение, заранее заблаговременно – o0Lucky0o