Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2010, 19:48
Аватар для kukuyok
Интересующийся
Отправить личное сообщение для kukuyok Посмотреть профиль Найти все сообщения от kukuyok
 
Регистрация: 11.09.2010
Сообщений: 23

Когда локальные возомнили себя глобальными
Обработчиком document.body.onload назначена функция:
function initilitto()
	{
		for(var i=1; i<=N_men; i++)
		{
			var dMen = document.getElementById('pun'+i);
			
			dMen.onmouseover = function () {
				if(uhodT[i-1]!==undefined)
				{
					clearInterval(uhodT[i-1]);
				}
				uhodT[i-1]=setInterval(vyhozhka, 20);
				alert('Вылез '+i+'-й рулон');
			}
		
			dMen.onmouseout = function () {
				if(uhodT[i-1]!==undefined)
				{
					clearInterval(uhodT);
				}
				uhodT[i-1]=setInterval(uhozhka, 20);
			}
		}
	}


uhodT[] - массив с таймерами. Инициализированный со значениями undefined. Кстати, работоспособно ли?
uhodT=[
		undefined,
		undefined,
		undefined,
		undefined,
		undefined
	];


Если навести на любой из элементов с id=pun1...pun2 всплывает непременно "Вылез 6-й рулон", при этом N_men=5. Т.е. локальная иттерационная переменная цикла в конце инкрементируется, достигая значения 6, но, не пройдя условие продолжения цикла, не исчезает, а остаётся на плаву и используется назначенными на обработку событий функциями, как глобальная. Ну и всё, конечно, работает не как надо Как ея победить?
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2010, 20:16
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

http://javascript.ru/basic/closure
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2010, 19:41
Аватар для kukuyok
Интересующийся
Отправить личное сообщение для kukuyok Посмотреть профиль Найти все сообщения от kukuyok
 
Регистрация: 11.09.2010
Сообщений: 23

Сообщение от B@rmaley.e><e Посмотреть сообщение
http://javascript.ru/basic/closure
Спасибо. Муторно, но доступно Выходит:
function initilitto()
	{
		for(var i=0; i<N_men; i++)
		{
			var dMen = document.getElementById('pun'+(i+1));
			
			dMen.onmouseover = function(numar) {
				return function () {
					if(uhodT[numar]!==undefined)
					{
						clearInterval(uhodT[numar]);
					}
					uhodT[numar]=setInterval(vyhozhka, 20);
				}
			}(i);
			
			dMen.onmouseout = function(numar) {
				return function () {
					if(uhodT[numar]!==undefined)
					{
						clearInterval(uhodT[numar]);
					}
					uhodT[numar]=setInterval(uhozhka, 20);
				}
			}(i);
		}
	}


Правда, проявилась проблема иного характера... разумеется
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск