Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Меню на javascript, проблемка с созданием обработчика в цикле (https://javascript.ru/forum/dom-window/7463-menyu-na-javascript-problemka-s-sozdaniem-obrabotchika-v-cikle.html)

Atreides 02.02.2010 20:50

Меню на javascript, проблемка с созданием обработчика в цикле
 
Хочу заделать менюшку, при создании пунктов меню сразу создаются обработчики нажатия на каждый пункт, но вместо "запоминания" обработчиками значения "i" на момент создания оных, они берут значение "i" на момент нажатия на пункт, т.е. когда ф-ия построения менюшки уже закончена.
function main_menu()
	  {
	    if(event.type=='click')
		{
	      if(!document.getElementById('menu_frame'))
		  {
	        var menu_frame=document.createElement('div');
	 	    menu_frame.className='menu_frame';
		    menu_frame.id='menu_frame';
			for(i=0;i<5;i++)
			{
			  menu_punkt=document.createElement('span');
			  menu_punkt.className='menu_punkt';
			  menu_punkt.innerHTML='Пункт меню '+i;	
			  menu_frame.onclick=function(){location.href='page'+i+'.html'}
			  menu_frame.appendChild(menu_punkt);			  
			}			
		    document.body.appendChild(menu_frame); 
		  }
		}
	  }

Пример упрощённый, в дальнейшем планируется раздавать обработчикам ссылки на страницы из массива, "i" будет ключом массива (а значит, всем пунктам меню назначится последняя в массиве ссылка), так что просьба не уводить в обходные пути, вариант выбран не случайно.

cooli0 03.02.2010 01:27

А случайно menu_frame.onclick не надо заменить на menu_punkt.onclick ?

Kolyaj 03.02.2010 07:07

http://javascript.ru/basic/closure#p...-ispolzovaniya

Atreides 03.02.2010 08:43

Цитата:

Сообщение от cooli0 (Сообщение 43324)
А случайно menu_frame.onclick не надо заменить на menu_punkt.onclick ?

Да, верно, очепятка присутствует )

Цитата:

Сообщение от Kolyaj (Сообщение 43328)

Благодарю, то что надо ;)


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