Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Выпадающее меню (https://javascript.ru/forum/dom-window/50683-vypadayushhee-menyu.html)

Smike 07.10.2014 14:57

Выпадающее меню
 
Добрый день. Решил сделать простейшее выпадающее меню на javascript, но оно не работает. что я делаю неправильно?

http://jsfiddle.net/wyxk7uqd/1/

PS не судите строго

d.skuratovich 07.10.2014 16:04

Я посмотрел. У тебя есть ошибки, потому и не работает.
Я бы советовал тебе пользоваться jQuery, если ты толком не понимаешь как работает то или иное. Если все же не поймешь, то пиши, будем разбираться)

danik.js 07.10.2014 16:41

Вообще-то это люди в здравом уме такое меню на css делают, если нет особых причин делать на js.

d.skuratovich 07.10.2014 16:43

Цитата:

Сообщение от danik.js (Сообщение 333903)
Вообще-то это люди в здравом уме такое меню на css делают, если нет особых причин делать на js.

Нам попался извращенец-фетишист)

Smike 07.10.2014 16:52

это не для какого-то проекта. я изучаю js, именно поэтому решил сделать на js =)

danik.js 07.10.2014 17:24

Тогда совет про jQuery не актуален) К пониманию js эта либа не приведет)
Забей на всякие attachEvent. Ты же не на IE8 запускаешь свои поделки?
getElementsByClassName возвращает массив, а не один элемент. А у массива нет метода addEventListener. Цикл for() в помощь.
Ну и на самом деле это не массив, а NodeList, у него нет forEach, indexOf и тд. - это для справки.

Ну и строчка с list становится тоже не актуальной. Получай list прям в обработчиках события.

И получаешь ты его неправильно. firstChild - это будет текстовая нода (Home). Нужно либо link.querySelector('.list') либо link.firstElementChild

рони 07.10.2014 17:28

Smike,
:cray:
http://jsfiddle.net/wyxk7uqd/2/

danik.js 07.10.2014 17:45

рони, в IE8, в обработчике, привязанном через attachEvent, this будет указывать на window )
А вот children, да, будет работать, в отличие от firstElementChild. Правда теоретически, если первой нодой будет html-комментарий, то children[0] укажет на него )

danik.js 07.10.2014 17:47

Хех, ну и getElementsByClassName тогда надо менять на querySelectorAll, иначе в IE8 скрипт все равно не будет работать))


Часовой пояс GMT +3, время: 01:56.