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 21: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 02:27

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

Kolyaj 03.02.2010 08:07

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

Atreides 03.02.2010 09:43

Цитата:

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

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

Цитата:

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

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


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