考慮下面的代碼:遍歷JavaScript對象綁定密鑰
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
包裝。
SOLUTION:
我這個修改解決了它:
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怪癖。
所有這些變量都是在上面的某個地方聲明的,對吧? –
是的。這是一個片段。 – mybuddymichael
「bind()」的第二個參數應該是一個對象(表示事件數據),而不是一個字符串。 –