Учитывая следующий код:
controls = {
'w': 'up',
's': 'down',
'a': 'left',
'd': 'right'
};
keysPressed = [];
for (control in controls) {
direction = controls[control];
$(document).bind('keydown', control, function() {
keysPressed.push(direction);
});
}
Связывается только направление right
и оно привязано ко всем четырем ключам.Это явно не предназначено, но чего мне не хватает в JavaScript, который препятствует надлежащему связыванию всех свойств?
РЕДАКТИРОВАТЬ:
Для пояснения я использую jQuery.hotkeys для обработки имен ключей.И это фрагмент;Вы можете предположить, что все переменные были объявлены.Кроме того, код находится в безопасной function
оболочке.
РЕШЕНИЕ:
Я решил это с помощью этой модификации:
controls = {
'w': 'up',
's': 'down',
'a': 'left',
'd': 'right'
};
keysPressed = [];
addToKeyPressArray = function(value) {
return function() {
keysPressed.push(value);
};
};
removeFromKeyPressArray = function(value) {
return function() {
keysPressed = keysPressed.filter(value);
};
};
for (control in controls) {
direction = controls[control];
$(document).bind('keydown', control, addToKeyPressArray(direction));
$(document).bind('keyup', control, removeFromKeyPressArray(direction));
}
Этостранная JavaScript причуды.