Несколько элементов управления на странице с несколькими экземплярами Javascript
Я создал веб-элемент управления в ASP для использования при интеграции с Telligent CommunityServer. Элемент управления написан на ASP с примерно 10 строками бэкэнда C# для управления видимостью элементов пользовательского интерфейса на основе разрешений, но я бы сказал, что 90% функциональности - это простой Javascript.
Элемент управления работает прекрасно, пока вы не уроните два экземпляра элемента управления на одной странице - поскольку они ссылаются на одни и те же функции Javascript, работает только один элемент управления.
Как я могу взять эту функциональность, которая у меня есть, эти 1200 строк Javascript, и сделать так, чтобы каждый экземпляр элемента управления мог ссылаться на каждый свой уникальный экземпляр Javascript?
2 ответа
Если проблема состоит в том, чтобы просто выяснить, какой элемент HTML вызвал событие, то это легко - он передается вам в аргументах события. (Конечно, вы можете получить его родительский элемент.) Поэтому, если я правильно понимаю проблему, у вас есть функции JavaScript, ссылающиеся на некоторые элементы управления, которые дублируются?
Я не думаю, что здесь есть какое-то волшебное решение: нужно просто сделать идентификаторы уникальными. Если вы не используете серверные элементы управления (которые обрабатывают это для вас автоматически), то вы можете использовать какой-нибудь сгенерированный на стороне сервера префикс или суффикс, например.
<input id="<%= ParentControlId %>_mytextbox" type="text" />
где ParentControlId
это уникальный идентификатор родительского элемента управления (вы можете просто использовать Control.ID, если не возражаете против длинных идентификаторов).
Конечно, вы должны попытаться повторно использовать ваши функции JavaScript, а не дублировать их для каждого экземпляра элемента управления. Если вы используете подход сгенерированного идентификатора сервера, вам придется передавать все идентификаторы. Если вы используете префиксный подход, вы можете просто передать префикс.
Каким образом ваш контроль получает JavaScript на страницу? Впрыскивать это напрямую? Вы используете ScriptReference? Браузер загрузит JS только один раз, если оба элемента управления ссылаются на один и тот же JS (один и тот же URL).
Кроме того, ваш JS написан с точки зрения какого-либо старого экземпляра? Например, у вас есть такая функция, как Load(oControlName), или у функции Load() есть жестко запрограммированное имя экземпляра?
IMO, попытка получить несколько "JavaScripts" не путь вперед - рефакторинг вашего кода может получить ваш ответ быстрее.