Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Добавление события нескольким элементам (https://javascript.ru/forum/events/11229-dobavlenie-sobytiya-neskolkim-ehlementam.html)

Askhsiv 13.08.2010 22:32

Добавление события нескольким элементам
 
Здравствуй многоуважаемый олл :)

видимо я перегрелся или переработал, но не могу решить скорее всего простую задачку, прошу о помощи :-?

дано: несколько элементов, которым надо добавить событие, по которому вызывается функция с разными параметрами.

проблема: если перечислять каждый элемент с его параметром для функции, всё работает, но при перечислении в цикле все элементы срабатывают с последним параметром.

HTML:
<style> div {width:50px; height:50px; margin:10px; background:#036} </style>

<div id="a1"></div>
<div id="a2"></div>
<div id="a3"></div>

<input type="button" value="Add Event" onclick="add_event()" />


javascript:
function add_event()
{
	for(n=1; n<4; n++)
	{
			document.getElementById('a'+n).onmouseover = function(){ alert(n); }
	}
	
	//document.getElementById('a1').onmouseover = function(){ alert(1); }
	//document.getElementById('a2').onmouseover = function(){ alert(2); }
	//document.getElementById('a3').onmouseover = function(){ alert(3); }
}


если расслешить три строчки в функции, то всё работает правильно, а так алертает цифру 4. очевидно javascript запоминает последнее значение переменной в которой передаётся параметр для функции и обращается к нему для всех элементов.

Askhsiv 13.08.2010 22:58

ааа разобрался, замыкания!!! забыл млин:lol:

document.getElementById('a'+n).onmouseover = function(n){ return function(){ alert(n) } }(n)


тему удавлять?


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