我很长时间都在努力让我的代码工作,并在StackOverflow上尝试了各种各样的答案,这些答案都采用了相同的形式。最后,我决定这个:
$(window).bind('keydown',function(e) {
if ((e.which=='115' || e.which=='83') && (e.ctrlKey || e.metaKey)){
e.preventDefault();
saveForm(); // Uses AJAX to save all the data in my form
return false;
}
}
问题在于,无论我尝试了什么,只要绑定到窗口,文档,keydown,按键的组合,没有任何工作,无论如何都会出现保存对话。
答案 0 :(得分:1)
因为我在页面卸载时使用saveForm()
函数来确保在导航之前保存数据,所以我必须将ajax函数设置为异步。这意味着在保存和到达return false
语句之间存在争用条件,当我评论saveForm()
调用时,似乎是有效的(我不知道为什么{{1}并没有阻止它,但它没有。)
为了解决竞争条件,我考虑设置一个变量来选择何时同步或异步进行保存,但我意识到我可以通过延迟保存直到我完全取消 CTRL <之后完全避免竞争条件/ kbd> + S 组合键。以下是我的代码的最终版本:
preventDefault
这样,$(window).bind('keydown',function(e) {
if ((e.which=='115' || e.which=='83') && (e.ctrlKey || e.metaKey)){
e.preventDefault();
setTimeout(function(){saveForm();},200);
return false;
}
}
和preventDefault
都会立即执行,我的保存会在几毫秒后弹出。