Почему позиционирование <script>в HTML для события window.onload имеет значение? - PullRequest
1 голос
/ 14 февраля 2012

У меня есть форма, которая динамически скрывает поле ввода текста, в зависимости от первоначального выбора поля параметра при загрузке.После некоторых проб и ошибок я понимаю, что тег <script> должен быть расположен ниже элементов <form>, чтобы эта функция работала:

<html>
....
 <body>
....
  <form>
   <select name=choice>
    <option value=0 selected>Default</option>
    <option value=1>Others</option>
   </select>
   <input type=text name=others></input>
  </form>
....
  <script type='text/javascript'>
   function init()
   {
    var A = document.forms[0].choice;
    var B = document.forms[0].others;
    if(A.options[A.selectedIndex].value == 0) B.style.display = 'none';
   }
   window.onload = init();
  </script>
....
 </body>
</html>

Событие window.onload является глобальным событиемэто срабатывает после загрузки всех ресурсов страницы, включая DOM, изображения, фреймы и т. д.Тогда зачем все-таки необходимо размещать тег <script> под элементами <form>?

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Поскольку вы выполняете init function вместо того, чтобы назначить указатель на функцию ...

Изменить:

window.onload = init();

На:

window.onload = init;
1 голос
/ 14 февраля 2012

Это из-за опечатки в вашем коде:

window.onload = init();

Это на самом деле немедленный вызов функции init (а затем установка window.onload в неопределенное состояние). Попробуйте:

window.onload = init;
1 голос
/ 14 февраля 2012

JavaScript и HTML работают правильно.Но я вижу некоторые ошибки в вашем коде.

window.onload = init(); 

Эта строка означает немедленное использование функции init и установление результата функции в качестве события загрузки.Вот почему он работает, когда вы помещаете его в элемент формы.

...