@whiteleaf

Как исправить «Uncaught TypeError: undefined is not a function»?

Здравствуйте!
Я вот уже на протяжении нескольких недель изучаю JavaScript и при написании вот этого скрипта у меня вылезла вот такая вот ошибка: "Uncaught TypeError: undefined is not a function".
Подскажите мне, пожалуйста, почему она появилась и как мне ее исправить.

Заранее спасибо!

//  Assigning of global variables. Looking for the objects in the document.
var systemMenu = document.getElementById('system-menu');
var systemIn = document.getElementById('sign-in').getElementsByTagName('a')[0];
var signInForm = document.getElementById("signInForm");
var wrongEmail = document.getElementById('wrong-email');
var loginInput = document.getElementById('login-email');
var wrapper = document.getElementById('wrapper');
var pressed;


// Assigning EventListener to menu which is supported by all new and even ancient IE<9(realized with the special function AttachEven)
(window.addEventListener) ? wrapper.addEventListener('click',menuToggle,true) : wrapper.attachEvent('onclick',menuToggle);	

function menuToggle(e){
	var target = e.target || e.srcElement;

	// Closing or hiding elements
	

	while(target != systemMenu){

		if(target.getAttribute('id') == 'system-menu') return;

		

		if(target.getAttribute('id') == 'support'){
			alert('You\'ve just pressed Support button!');
		}

		if(target.getAttribute('id') == 'lang'){
			alert('You\'ve just pressed Language button!');
		}

		if(target.getAttribute('id') == 'sign-in'){
			alert('You\'ve just pressed SignIn button!');
		}

		if(target.tagName == 'LI'){
			pressed = target;
		}
		
		target = target.parentNode;
	}

	if(target == wrapper){
		alert('looped');
	}


}
  • Вопрос задан
  • 9931 просмотр
Решения вопроса 1
barkalov
@barkalov
Используйте дебаггер. Chrome -> F12 -> Sources. Ставите брейкпоинт на первой строке функции (кликом по номеру строки) и поехали F10, F10, F10...
А ещё в консоли (Chrome -> F12 -> Console) видно номер строки, на которой ошибка случилась. Справа от текста ошибки.

Ошибка в том, что в цикле (while) target "поднимается" по дереву к предкам div -> ... -> body -> html -> #document, а у последнего нет функции .getAttribute()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽