2015-03-10 2 views
0

`javascript загружен с пути; как использовать document.getElementById

function init() { 
 
    var a = 'output of my processing'; 
 
    alert('I am here'); // alert pops up 
 
    document.getElementById("<%=hdnField.ClientID %>").value = a; 
 
}
<head> 
 
    <script src="../Scripts/myscripts.js"></script> 
 
</head> 
 

 
<body onload="init()"> 
 
    <asp:HiddenField ID="hdnField" runat="server" /> 
 
</body>

` У меня есть страница с большим количеством JavaScript; Я пытаюсь очистить его, перемещая скрипты в папку сценария и ссылаясь на путь; Кажется, что он работает нормально, за исключением случаев, когда он сталкивается с document.getelementbyid (controlname.id) '- it throws' TypeError: не может прочитать значение свойства 'null'

Я понимаю, что он не может найти элемент управления. Почему это происходит? Я думал, что DOM уже построен - какая разница в том, что все-таки перемещение javascript на путь делает это? Любые идеи о том, как заставить его работать? Мне бы очень хотелось, чтобы javascript был перемещен со страницы.

+0

Можете ли вы разместить свой код, как HTML, так и JS? – Paul

+0

Я только что сделал, в его самой упрощенной форме. – user1191463

ответ

1

Вы используете встроенные вызовы ASP.Net внутри своего JS. Это не могло работать по двум причинам:

  1. Возможно, у вас нет сервера, настроенного для обработки файлов .js с использованием процессора ASP.Net.
  2. Даже если вы это сделали, обработка .js будет полностью отделена от хостинга .aspx-страницы; значение hdnField не было бы в области видимости.

Вы бы лучше передавая знания об элементах на странице непосредственно на JavaScript:

JS:

function init(config) { 
    var a = 'output of my processing'; 
    alert('I am here'); // alert pops up 
    document.getElementById(config.hdnFieldID).value = a; 
} 

ASPX:

<head> 
    <script src="../Scripts/myscripts.js"></script> 
</head> 

<body onload="init({ hdnFieldID: '<%= hdnField.ClientID %>' })"> 
    <asp:HiddenField ID="hdnField" runat="server" /> 
</body> 

Надежда, что помогает.

1

Этот ответ предполагает, что структура вашей каталогов верна.

Переместите свой тег скрипта на дно тела, как раз перед этим. Here - хороший ответ на этот вопрос, а here - это еще один.

Кроме того, в общем, плохой практикой является вызов функции JavaScript изнутри элементов HTML. Если вы не используете jQuery, вы можете добавить прослушиватель событий «DOMContentLoaded» для запуска кода. С помощью jQuery стандартное $ (document) .ready() доказало свою эффективность. Или, если вы просто поместите свой скриптовый тег в нижнюю часть и поместите init(); в конце вашего JS-файла все будет работать правильно. Это было бы для очень простого приложения, но простота иногда лучшая.

И, наконец, для проверки работоспособности вы можете запрограммировать идентификатор в своей функции init. Я не знаю asp.net, но вы можете проверить вывод <% = hdnField.ClientID%>. Вы уверены, что получаете правильный идентификатор?

Удачи.

Смежные вопросы