Я хотел бы добавить это на случай, если кто-то еще столкнулся с этой проблемой.
Проблема, с которой вы столкнулись, звучит точно так же, как у меня.
Если бы я связал несколько событий ярлыков, то каждое из них выполнялось бы на один раз меньше, чем общее количество привязок ярлыков в документе. У меня было что-то вроде этого:
$(document).bind('keydown', 'alt+a', function () {
alert('A Pressed');
});
$(document).bind('keydown', 'alt+b', function () {
alert('B Pressed');
});
$(document).bind('keydown', 'alt+c', function () {
alert('C Pressed');
});
Для каждого ярлыка я получаю предупреждение два раза. Я решил это, чтобы отменить привязку ярлыка и добавить метод для обработки предупреждения и отмены привязки.
$(document).ready(function () {
$(document).bind('keydown.alt+a', 'alt+a', function () {
alertAndUnbind('A', 'alt+a');
});
$(document).bind('keydown.alt+b', 'alt+b', function () {
alertAndUnbind('B', 'alt+b');
});
$(document).bind('keydown.alt+c', 'alt+c', function () {
alertAndUnbind('C', 'alt+c');
});
});
function alertAndUnbind(letter, shortcut) {
alert(letter);
$(document).unbind('keydown.' + shortcut, shortcut);
});
Использование unbind таким образом позволило мне выполнять код каждого ярлыка только один раз, сохраняя при этом функциональность ярлыка при каждом нажатии ярлыка, и мой код оставался относительно СУХИМЫМ.