Прежде всего, я прочитал все предложенные вопросы, которые звучали наполовину актуально, и не нашел ничего, что касалось моей проблемы. Во-вторых, если это уже где-то решено, я не достаточно хорошо его искал. Наконец, к проблеме. : D
У меня есть страница с позицией. «Позиция» для наших целей - это просто набор HTML-элементов в горизонтальной строке, которые образуют строку входных данных HTML (например, представьте такие столбцы, как штучки, описание, вес, единичный тариф, общий тариф). Одним из элементов управления HTML в нашей позиции является собственно серверный элемент управления, который испускает некоторый Javascript. Среди прочего, Javascript сообщает объект типа X следующим образом:
var whatever = new X(constructor values);
Теперь пользователь может добавлять позиции с помощью кнопки Добавить. В настоящее время я просто клонирую чистую копию HTML, которая формирует позицию. Это также клонирует код Javascript, так что теперь у каждой позиции есть var whatever = new X(constructor values);
. Это создает проблему в том, что есть несколько строк, ссылающихся на одну и ту же переменную Javascript (а именно, whatever
).
Это, конечно, разрушает все, что мне нужно, чтобы ссылаться на каждый из whatever
как на отдельные экземпляры, а не на один и тот же экземпляр. Мне интересно, есть ли подходы к решению этой ситуации. Как использовать пользовательский серверный элемент управления, но при этом ссылаться на Javascript, который излучает каждая строка? Или как мне создать новую позицию таким образом, чтобы избежать этой проблемы?
Я новичок во всей арене доработки DOM, использующей Javascript, и я не могу найти какие-либо полезные практики или примеры, которые могут оказаться полезными, поэтому я в некотором растерянности. *
Имеет ли все это смысл? Если нет, пожалуйста, дайте мне знать, что не так, и я постараюсь прояснить это как можно лучше.
РЕДАКТИРОВАТЬ: Вот небольшой пример кода.
Именно так выглядит объявление объекта JavaScript:
var example = new SmartDropDown('uomSDD','75','1','7','','','','',2);
Первый параметр - это HTML-идентификатор одного из элементов, которые отображаются, и по этой причине я не смог просто использовать массив (как упомянуто в одном из ответов; однако, отличный ответ, пока я не понял, что забыл упомянуть эту деталь). Мне нужно было бы придумать способ изменить идентификатор и использовать массив.
Некоторые методы объекта SmartDropDown: ShowOptions
, HideOptions
, BindOptions
.
Что касается кода, который вызывается при нажатии кнопки, вот он:
function AddLineItem()
{
var lineItemsParent = $("lineItems");
var newRow = lineItemTemplateNode.cloneNode(true);
lineItemsParent.appendChild(newRow);
}
Итак, подведем итог: HTML-элемент строки содержит обычные элементы: входные данные, выборки, интервалы и т. Д., А затем объявление JS, указанное выше. И из-за способа, которым я добавляю новую позицию (используя приведенный выше код), переменная JS тоже клонируется. И мне нужен способ 1) изменить идентификатор элемента и 2) отслеживать все ссылки JS (массив уже предложил).