Передать обработчику событие + замкнутый аргумент
Здравствуйте.
Возникла проблема при назначении обработчика событию. Обработчику нудно передать событие и счетчик, который нужно замыкать в обработчике. Вот максимально возможно близкий пример 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 будут выполняться определенные действия, грубо говоря, несколько идентичных вариантов управления в массиве, соответствующих разным объектам из другого массива, которыми можно будет управлять с клавиатуры, каждому соответствует свой набор клавиш. Событие внутри обработчика нужно знать чтобы определять какая нажата клавиша. Подскажите пожалуйста, как передать событие + замкнуть аргумент в обработчике? И возможно ли это вообще. Прошу прощения за много букв, ведь наверняка решение очень простое и лежит на поверхности |
Прошу прощения, все получилось.
/*...*/ for(var i = 0; i < control.length; i++){ window.addEventListener("keydown", function(n){ return function(e){ hnd(e, n)} }(i) ,false) } /*...*/ |
Часовой пояс GMT +3, время: 16:52. |