我正在尝试在浏览器上同时捕获Ctrl-S和Cmd-S,以确保Web应用程序的跨OS兼容性。我在这里看到了有关如何执行此操作的线程:jquery keypress event for cmd+s AND ctrl+s

我的代码中包含以下代码段:

$(document).keypress(function(event) {
  if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) {
    event.preventDefault();
    save();
    return false;
  }
  return true;
});


其中save()是JavaScript函数,将来会发送AJAX请求,但现在只有alert('Saved!');

但是,尽管它捕获了Ctrl-S,但没有捕获Chrome上的Cmd-S,而是像往常一样打开了保存网页对话框。我看到该页面上的其他人也遇到了同样的问题,但是我没有找到解决方案。

提前致谢!

最佳答案

我认为您所拥有的按键不会以完全相同的方式注册元键,请参见:Diffrence between keyup keydown keypress and input events这是一个小提琴,似乎可以使用按键按下来工作,然后依次捕获每个按键。希望能帮助到你?



var metaflag = false;

$(document).on({
	keydown: function(event) {
    if (event.ctrlKey||event.metaKey || event.which === 19) {
      event.preventDefault();
      $('.monitor').text('key '+event.which);
      metaflag = true;
    }
  	if( metaflag && event.which === 83 ){ // 83 = s?
      event.preventDefault(); // maybe not necessary
      $('.display').text('saving?');
      metaflag = false;
    }
  }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class='monitor'></div>
<div class='display'></div>

关于javascript - 在Mac上的Chrome上无法捕获Cmd-S,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39198814/

10-15 05:56