Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Uncaught TypeError: Cannot call method 'getElementById' of undefined (https://javascript.ru/forum/css-html-firefox-mizilla/24681-uncaught-typeerror-cannot-call-method-%27getelementbyid%27-undefined.html)

poorking 11.01.2012 13:25

//	У вас есть кнопка. На кнопке, на событии click висит обработчик-функция,
//	когда вы кликаете по кнопке, функция запускается
	
//	Создаем анонимную функцию и тут же ее вызываем,
//	чтобы замкнуть внутри некоторые данные, а эта анонимная функция уже вернет нашу
//	функцию обработчик, которую мы сохраним в ссылке под именем toggleMenu
//	которую мы и будем в итоге использовать
var toggleMenu = (function () {
	
	//	Ширина фрейма меню. Я предположил что она заранее известна
	var DEFAULT_MENU_WIDTH = 200;	//	или любое другое значение в пикселах
	
	//	Ширина фрейма, когда меню скрыто
	var HIDDEN_MENU_WIDTH = 0;	//	или любое друго значение
	
	//	Статическая ссылка на фреймсет, чтобы не делать
	//	выборку каждый раз, получаем ее сразу
	var frame = top.document.getElementsByTagName("frameset")[0];	//	или другая выборка, по id например
	
	//	Это сама функция, которую возвращает наша анинимная функция
	return function () {
		
		//	Получаем значение атрибута cols фреймсета, раз вы выбрали
		//	такой путь скрытия меню, то по значению этого атрибута мы узнаем,
		//	скрыто или открыто меню.
		var colsValue = frameset.getAttribute(cols);
				
		//	Если значение атрибута имеется и первый его символ равен 0,
		//	то значит, что ширина левогог фрейма равна нулю, значит "меню скрыто"
		if ( colsValue && colsValue.clarAt(0) ) {
				
			//	Значит надо его показать
			
			//	Получаем новое значение атрибута cols из нашщей "константы" DEFAULT_MENU_WIDTH,
			//	а значение ширины второго фрейма - все оставшееся пространство(*)
			colsValue = MENU_WIDTH + ", *";
			
			//	Устанавливаем новое значение атрибута cols
			frameset.setAttribute("cols", colsValue);
			
		} else {
			
			//	Если меню не скрыто, то оно открыто (O_O)
	
			//	Получаем новое значение
			colsValue = HEDDEN_MENU_WIDTH + ", *";
			
			//	Устанавливаем
			frameset.setAttribute("cols", colsValue)
		}
	}
				
	//	Итого, по клике на кнопку "Скрыть/развернуть меню",
	//	наш обработчик события click сам определил, скрыто меню или нет, и выбрал нужное действие
}());

//	Теперь просто нужно повесить эту функцию обработчиком на событие click


Поподробнее расписал, но сделал вывод что знаний по предмету у вас нет, все равно все кончится тем, что вы пойдете читать учебник на этом сайте, если, конечно, заинтересутесь


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