Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2011, 03:42
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Передать обработчику событие + замкнутый аргумент
Здравствуйте.
Возникла проблема при назначении обработчика событию. Обработчику нудно передать событие и счетчик, который нужно замыкать в обработчике.

Вот максимально возможно близкий пример
function constr(){/*...*/}

var control = [
	{	//стрелки
		left: 37,
		up: 38,
		right: 39,
		down: 40
	},
	{	//wasd
		left: 65,
		up: 87,
		right: 68,
		down: 83
	}]
var objs = []

for(var i = 0; i < control.length; i++)
	objs.push(new constr())


	
function hnd(e, arg){		
	if(!e) e = window.event
	var key = e.which || e.keyCode
	switch(key){
		case control[arg].left:
			objs[arg].doSomething1()
		
		break
		case control[arg].up:
			objs[arg].doSomething2()
		
		break
		case control[arg].right:
			objs[arg].doSomething3()
		
		break
		case control[arg].down:
			objs[arg].doSomething4()
		break
	}
}
/*В цикле каждому объекту назначаем обработчик*/
for(var i = 0; i < control.length; i++){
	window.addEventListener("keydown",
		function(e, n){
			
			return function(){ hnd(e, n)}
			
			
		}(/*Здесь видимо должна быть ссылка на событие*/, i)
	
	,false)
}

В обработчике в switch case с объектом под номером arg будут выполняться определенные действия, грубо говоря, несколько идентичных вариантов управления в массиве, соответствующих разным объектам из другого массива, которыми можно будет управлять с клавиатуры, каждому соответствует свой набор клавиш. Событие внутри обработчика нужно знать чтобы определять какая нажата клавиша.
Подскажите пожалуйста, как передать событие + замкнуть аргумент в обработчике? И возможно ли это вообще. Прошу прощения за много букв, ведь наверняка решение очень простое и лежит на поверхности
__________________
readOnly

Последний раз редактировалось poorking, 26.02.2011 в 04:10.
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2011, 04:29
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Прошу прощения, все получилось.
/*...*/
for(var i = 0; i < control.length; i++){
	window.addEventListener("keydown",
		function(n){
			
			return function(e){ hnd(e, n)}
				
		}(i)
	
	,false)
}
/*...*/
__________________
readOnly
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в событие объекта передать свойство метода DVVID Events/DOM/Window 8 22.02.2010 12:30