我想添加它以防其他人遇到此问题。
你遇到的问题听起来和我遇到的一模一样。
如果我绑定了多个快捷方式事件,那么每个快捷方式事件的执行时间将比文档中快捷方式绑定的总数少一倍。我有这样的事情:
$(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 允许我只执行每个快捷方式的代码一次,同时在每次按下快捷方式时保留快捷方式功能,并保持我的代码相对干燥。