#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 — вероятно, для определения переменной требуется тот же сценарий, что и здесь, но намного понятнее.