Несколько элементов управления на странице с несколькими экземплярами Javascript - PullRequest
0 голосов
/ 11 мая 2010

Я создал веб-элемент управления в ASP для использования при интеграции с Telligent CommunityServer. Элемент управления написан на ASP с примерно 10 строками бэкэнда C # для управления видимостью элементов пользовательского интерфейса на основе разрешений, но я бы сказал, что 90% функциональности - это простой Javascript.

Элемент управления работает прекрасно, пока вы не отбросите два экземпляра элемента управления на одной странице - поскольку они ссылаются на одни и те же функции Javascript, работает только один элемент управления.

Как я могу взять эту функциональность, которая у меня есть, эти 1200 строк Javascript и сделать так, чтобы каждый экземпляр элемента управления мог ссылаться на каждый свой уникальный экземпляр Javascript?

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Если проблема состоит в том, чтобы просто выяснить, какой элемент HTML вызвал событие, то это легко - он передается вам в аргументах события. (Конечно, вы можете получить его родительский элемент.) Поэтому, если я правильно понимаю проблему, у вас есть функции JavaScript, ссылающиеся на некоторые элементы управления, которые дублируются?

Не думаю, что здесь есть какое-то волшебное решение: нужно просто сделать идентификаторы уникальными. Если вы не используете серверные элементы управления (которые обрабатывают это для вас автоматически), то вы можете использовать какой-то сгенерированный на стороне сервера префикс или суффикс, например.

<input id="<%= ParentControlId %>_mytextbox" type="text" />

где ParentControlId - это уникальный идентификатор родительского элемента управления (вы можете просто использовать Control.ID, если не возражаете против длинных идентификаторов).

Конечно, вы должны попытаться повторно использовать ваши функции JavaScript, а не дублировать их для каждого экземпляра элемента управления. Если вы используете подход сгенерированного идентификатора сервера, вам придется передавать все идентификаторы. Если вы используете префиксный подход, вы можете просто передать префикс.

0 голосов
/ 11 мая 2010

Каким образом вы управляете передачей JavaScript на страницу? Впрыскивать это напрямую? Вы используете ScriptReference? Браузер загрузит JS только один раз, если оба элемента управления ссылаются на один и тот же JS (один и тот же URL).

Кроме того, ваш JS написан в терминах какого-либо старого экземпляра? например у вас есть такая функция, как Load (oControlName) или у функции Load () есть жестко запрограммированное имя экземпляра?

IMO, попытка получить несколько «JavaScripts» - это не путь вперед - рефакторинг вашего кода может получить ваш ответ быстрее.

...