Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Нужна консультация (https://javascript.ru/forum/events/61030-nuzhna-konsultaciya.html)

regimentor 01.02.2016 14:26

Нужна консультация
 
Собственно сразу по теме
function menuFunc () {
	// тут что то есть
}
var menu = $(".menu li");
var i = 0;
menu[i].addEventListener("click",menuFunc,false);
i++;
menu[i].addEventListener("click",menuFunc,false);
i++;
menu[i].addEventListener("click",menuFunc,false);

"скрипт" приведенный выше выполняется без ошибок. А вот скрипт приведенный ниже выполняется с ошибкой : "Cannot read property 'addEventListener' of undefined".
var menu = $(".menu li");
function menuFunc () {
	// тут что то есть
}
for(var i = 0; i <= menu.length; i++){
	menu[i].addEventListener("click",menuFunc,false);
}


Вопрос: Почему ?

Объясните или покидайте ссылки то теме(на рускоязычные ресурсы) ибо мой поиск мне ничего не дал, собственно поэтому и решил задать вопрос на форуме.

Lemme 01.02.2016 15:06

for(var i = 0; i <= menu.length - 1; i++)

Dilettante_Pro 01.02.2016 15:09

regimentor,
for(var i = 0; i <= menu.length; i++)
menu.length - количество элементов массива.
i - индекс элемента массива.
i = menu.length - за пределами массива

regimentor 01.02.2016 16:09

Примного благодарен

DynkanMaclaud 01.02.2016 20:29

regimentor,
https://jsfiddle.net/daniilKhanin/oat9aakL/1/

У меня всё работает... странно, а че ты jquery юзаешь? попробуй VanillaJs

Dilettante_Pro 02.02.2016 11:07

DynkanMaclaud,
В вашем примере, если посмотреть
var menu = $(".menu li");
    alert(menu.length);

то увидим 3, тогда как в li прописываются значения 0,1,2
т.е. в вашем варианте ошибка тоже есть, только она маскируется исполняющей системой.
Код внешне отрабатывает чисто, сообщение об ошибке видно только в консоли.
Думаю, это не лучший стиль программирования - закладывать в коде ошибку в надежде на то, что система ее адекватно обработает, а потом ломать голову


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