Я использую горячие клавиши jresig jresig, и похоже, что это работает для отдельных горячих клавиш. Проблема в том, что у меня есть список горячих клавиш из БД, и я хочу прочитать их и назначить горячие клавиши динамически. Итак, у меня есть список горячих клавиш и значений, и это мой JS:
$(document).ready(function() {
var keyList = [];
$('.hotkey').each( function(){
hotkey = $(this).attr('value');
hotkey = hotkey.substring(1,hotkey.length-1);
myVal = $(this).next().attr('value');
alert("binding " + hotkey);
$(document).bind('keydown', hotkey, function() {
alert("YOU PRESSED " + hotkey);
$('.chosen-category-id').attr('value', hotkey);
$('.chosen-category-name').attr('value', myVal);
});
})
})
Что происходит сейчас, так это то, что каждый раз, когда я нажимаю клавишу, она просто предупреждает последнюю горячую клавишу, с которой она связана. Здесь что-то не так с логикой? Я не позволяю себе копировать и вставлять строки zillion document.bind, поэтому я пытаюсь сделать это динамически.
EDIT
Я рефакторинг моего кода с этим:
$(document).ready(function() {
var keyList = [];
var keyValues = [];
$('.hotkey').each( function(){
hotkey = $(this).attr('value');
hotkey = hotkey.substring(1,hotkey.length-1);
keyList.push(hotkey);
keyValues.push($(this).next().attr('value')) ;
})
$.each(
keyList,
function(index, key) {
$(document).bind('keydown', key, function() {
alert("O HAI YOU PRESSED " + key);
$('.chosen-category-id').attr('value', key);
$('.chosen-category-name').attr('value', keyValues[index]);
return false;
});
}
)
})
это работает сейчас, но мне интересно, почему это работает, а другое - нет. Переменная горячей клавиши перезаписывает последнюю итерацию? Кроме того, этот первый код выглядит более эффективным, поскольку он выполняет только один цикл, а второй - два.