getelementsbyname addeventlistener - PullRequest
1 голос
/ 13 марта 2011
<form>
<a name='lala'/><a name='lala'/>
</form>

<script type='text/javascript'>
var elem=document.getElementsByName('lala');
alert(elem.length);
</script>

оповещение всплывает 0! ??так что это делает следующий не работает! ??

for(i in elem)
 elem[i].addEventListener('click',function(){alert('lala');}, false);

большое спасибо !!

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

Это не работает, потому что к тому времени, когда вы вызываете document.getElementsByName, элементы DOM еще не загружены, поэтому ваш document.getElementsByName('lala'); вернет ноль.

Есть несколько способов выполнить функцию, только когдаэлементы DOM готовы.Самый простой способ - создать функцию в вашем <head> и вызвать ее в событии загрузки вашего тела

<head>
    <script type="text/javascript">
    function domLoaded() {
       var elem=document.getElementsByName('lala');
          alert(elem.length);
       }
    </script>
</head>

<body onload="domLoaded();">


   ....


</body>

Когда вы поместили функцию javascript в конец вашего тега, вы просто начали вызыватькод, когда ваши элементы, где готовы.Это тоже сработает, но не лучше ли сделать все правильно и поместить весь свой JS-код в элемент head?Использование кода JS по всему коду сделает вашу жизнь адом, когда вам нужно что-то исправить.

0 голосов
/ 13 марта 2011

JavaScript-код должен быть включен в нижней части страницы, Вот почему, ребята, вы всегда должны размещать свой js-код внизу страницы. большое спасибо всем;)

0 голосов
/ 13 марта 2011

getElementsByName поддерживается не всеми браузерами, см. здесь для всех совместимых браузеров.

Это работает для меня, однако. Я использую Chrome 10.0.648.127

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...