Вот сложный. Я относительно новичок в написании сценариев, но у меня есть идея, с которой я хочу работать.
У меня есть скрипт, который динамически генерирует раскрывающиеся списки на основе массива: каждый элемент в этом массиве создает dropdownlist
.
function getDropDownLists(inputArray, grp) { //input an array and the UI Group we're adding these DDLs to
try {
eval(grp + "Array = [];"); //Creates an array to store the DDLs we're about to create
var listName; //Create variable to store name of DDL we're creating as we iterate through inputArray
for (var i = 0; i < inputArray.length; i++) {
listName = grp + "SrcLevel_" + i.toString(); //Get the name for the DDL we're about to create
eval('var ' + listName + ' = ' + grp + '.add("dropdownlist",[0,0,150,25])'); //add a DDL for the current array item
eval(listName + '.add("item","' + listName + '")'); //This line creates an item in each dropdown to tell me its name
eval(grp + "Array[" + i + "] = " + listName + ";"); //Adds newly created DDL to the storage array
}
} catch (e) {
alert("Error on line " + e.line + ":\n" + e.message);
}
}
Когда я вызываю эту функцию (здесь она может работать не идеально, так как я немного подчистил ее для отображения), она правильно создает все мои файлы dropdownlists
. Однако я хочу создать onChange
события для каждого из них, чтобы ссылаться на предыдущее в созданном массиве хранения и изменять его содержимое. Я знаю, как заставить работать события onChange
, если бы они были известны dropdownlists
, но каждый проект, над которым я буду работать, отличается, и я хотел бы, чтобы это работало без необходимости переоснащения каждый раз, когда требования проекта меняются.
Например, когда я вызываю getDropDownLists(['mom','dad','baby'],family)
, я получаю три dropdownlists
: familySrcLevel_0
,familySrcLevel_1
,familySrcLevel_2
. Как мне тогда создать onClick
событий для каждого из этих dropdownlists
, зная, что я не всегда буду знать, сколько их? Возможно ли такое? Это должно быть сделано в расширенном скрипте.
familySrcLevel_1
, чтобы сослаться на выборfamilySrcLevel_0
вверх по списку. - person Joshua Badger   schedule 18.06.2016onChange
. Наконец, я бы посоветовал избавиться от блокаtry catch
, а также блокeval
усложняет отладку кода. - person fabianmoronzirfas   schedule 19.06.2016try catch
? Разве это не цель отладки? Я должен оставить операторыeval
; именно они позволяют мне создаватьdropdownlists
на лету с уникальными именами переменных, чтобы я мог ссылаться на них раньше. - person Joshua Badger   schedule 21.06.2016eval
. Но поскольку в зависимости от разных проектов входной массив может меняться, я не всегда знаю, сколькоdropdownlists
мне понадобится. Поэтому я динамически создаю пользовательский интерфейс на основе этого массива, поэтому мне не нужно переписывать сценарий каждый раз, когда он меняется. Это позволяет мне ссылаться на этиdropdownlists
, давая им также уникальные сгенерированные имена, поэтому детиdropdownlists
могут изменять свое содержимое на основе родительскогоdropdownlists
. - person Joshua Badger   schedule 22.06.2016eval
? это кажется проще, чем пытаться создать строку ресурса, когда мне все равно нужно создатьonChange
функции дляdropdownlists
, используяeval
. - person Joshua Badger   schedule 22.06.2016