Ссылки на элементы управления ASPX из внешнего JS-файла

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

У меня вопрос. У меня есть элемент управления aspx (например, для текстового поля). Я ссылаюсь на него с помощью document.getElementById(‘<%=textbox.ClientID%>’).value . Когда у меня есть код в том же aspx-файле, он работает. Но как только ссылаться на него из внешнего файла (пример MyJSFunctions.js ), я не могу. Я получаю сообщение об ошибке «объект не существует или имеет значение null»

Я включил имя файла js, например

Я сделал это, потому что мне нравится, когда все мои функции js находятся в отдельном файле, и это также снижает нагрузку.

Почему это происходит? Могу ли я выполнить то же самое с помощью jquery?

Ответ №1:

Вам нужно будет настроить свой Javascript, чтобы принять нужный аргумент, затем передать встроенный ASP.NET скрипт внутри серверной страницы или элемента управления в качестве такого значения. Это позволит движку соответствующим образом отображать встроенный код.

Это происходит потому, что сервер отображает ваши страницы (не в смысле браузера, отображающего HTML, а скорее ASP.NET двигатель делает преобразования, чтобы превратить ваш .Сетевая веб-разметка в стандартную веб-разметку) перед отправкой их клиенту — это произойдет только для «зарегистрированных» типов, и это не включает (и не должно) файлы Javascript (хотя технически вы можете регистрировать элементы для обработки, если у вас нет специального модуля дляобработайте компиляцию встроенных сценариев в Javascript, тогда это все равно приведет к ошибке.)

jQuery, по сути, является чем-то вроде фреймворка Javascript, и с этим вы, так сказать, в одной лодке.

В качестве примера рассмотрим следующее…

Ваш файл сценария:

 function doSomethingJavascripty(withThisClientID) {
    //do something with...
    document.getElementById(withThisClientID).value;
}
  

Ваша страница ASPX:

 <script type="text/javascript" src="/path/to/script.js"><script> 

<script type="text/javascript">
    //call your function when appropriate...
    doSomethingJavascripty('<%=textbox.ClientID%>');
</script>
  

Ответ №2:

Одна вещь, которую вы могли бы сделать, это иметь следующий код Javascript на вашей странице ASPX:

 var myTextbox = '<%=textbox.ClientID%>';
  

Затем в вашем внешнем JS-файле (убедитесь, что это после приведенной выше строки),:

 document.getElementById(myTextbox).value
  

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

Комментарии:

1. Первое предложение, хотя и возможно, представляет собой процесс разделения зависимых элементов, что, как правило, является плохой идеей по тем же причинам, что и второе предложение; второе предложение, ну, это просто старая ужасная идея.

2. Мистер, я бы хотел лучше понять ваше предложение. Что вы подразумеваете под «параметризацией вашего Javascript»?

3. Серьезно? ХОРОШО … измените сценарий, чтобы он принимал параметр или «именованные аргументы», если вы предпочитаете эту терминологию, как часть подписи функции; затем используйте сценарий, вызывая функцию и передавая соответствующий аргумент (или значение), сохраняя как переменную, так и вызов JS в некотором выравнивании; какв отличие от простого определения переменной в любом месте и вызова, казалось бы, несвязанной функции, только для того, чтобы позже выяснить, что она сильно привязана к этой переменной.

4. Это заставило бы его переместить свой вызывающий код в файл ASPX (и насколько мы знаем, этот код нетривиален). Он уже указал, что хочет, чтобы все его функции JS были в отдельном файле.

5. Функции были бы такими, что вы просто вызывали бы их из файла ASPX — вероятно, для определения переменной требуется тот же сценарий, что и здесь, но намного понятнее.