如何在jQuery中捕获COMMAND + S?

我有一个我正在开发的Web应用程序,我正在尝试使用CTRL + S和COMMAND + S作为保存的快捷键。 我查看了http://www.openjs.com/scripts/events/keyboard_shortcuts/ ,它没有正确捕获“meta”键。

任何建议?

最新编辑:请在降低此响应之前请记住,这是一个非常古老的回复(2011年),并且尚未更新。 显然现在有更好的回应(如lapin那样 ),但这并不意味着我的无效。

您可以使用jquery热键 。

编辑: github上有一个更新的版本 ,您可以使用’meta’修饰符来获取命令+:

$(document).bind('keydown', 'meta+s', myaction.save); 

Edit2:您还可以使用不带jQuery的Mousetrap库/供应商。

下载最新版本并根据此附件中的更改进行修改: http : //code.google.com/p/js-hotkeys/issues/detail?id = 26

您只需要添加三行:

在线188 aprox。 (在ctrl = event.ctrlKey,下)添加:

 cmd = event.metaKey && !ctrl, 

然后,在203行aprox处添加if。 ( if(!shift && !ctrl && !alt){ ):

 if(!shift && !ctrl && !alt && !cmd){ 

最后,在if(shift) modif += 'shift+'; 添加这个:

 if(cmd) modif += 'command+'; 

现在当你创建一个绑定到command+whatever它将抓住它的command+whatever

 $(document).bind('keydown', 'command+s', myaction.save); 

在这里你可以获得最新修改的当前版本(0.7.9):

 /* (c) Copyrights 2007 - 2008 Original idea by by Binny VA, http://www.openjs.com/scripts/events/keyboard_shortcuts/ jQuery Plugin by Tzury Bar Yochay tzury.by@gmail.com http://evalinux.wordpress.com http://facebook.com/profile.php?id=513676303 Project's sites: http://code.google.com/p/js-hotkeys/ http://github.com/tzuryby/hotkeys/tree/master License: same as jQuery license. USAGE: // simple usage $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');}); // special options such as disableInIput $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {}); Note: This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind */ (function (jQuery){ // keep reference to the original $.fn.bind, $.fn.unbind and $.fn.find jQuery.fn.__bind__ = jQuery.fn.bind; jQuery.fn.__unbind__ = jQuery.fn.unbind; jQuery.fn.__find__ = jQuery.fn.find; var hotkeys = { version: '0.7.9', override: /keypress|keydown|keyup/g, triggersMap: {}, specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del', 35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 109: '-', 112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 120:'f9', 121:'f10', 122:'f11', 123:'f12', 191: '/'}, shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<", ".":">", "/":"?", "\\":"|" }, newTrigger: function (type, combi, callback) { // ie {'keyup': {'ctrl': {cb: callback, disableInInput: false}}} var result = {}; result[type] = {}; result[type][combi] = {cb: callback, disableInInput: false}; return result; } }; // add firefox num pad char codes //if (jQuery.browser.mozilla){ // add num pad char codes hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99: '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9', 106: '*', 107: '+', 109: '-', 110: '.', 111 : '/' }); //} // a wrapper around of $.fn.find // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d jQuery.fn.find = function( selector ) { this.query = selector; return jQuery.fn.__find__.apply(this, arguments); }; jQuery.fn.unbind = function (type, combi, fn){ if (jQuery.isFunction(combi)){ fn = combi; combi = null; } if (combi && typeof combi === 'string'){ var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString(); var hkTypes = type.split(' '); for (var x=0; x 

对于那些以轻量级和直接的方式完成工作而没有额外插件的人:

 $(window).keydown(function (e){ if ((e.metaKey || e.ctrlKey) && e.keyCode == 83) { /*ctrl+s or command+s*/ yourFunction(); e.preventDefault(); return false; } }); 

这是另一个更简单的(?)解决方案:

 $("#YourElementID").keydown(function (e) { if (e.metaKey == true) { alert('meta key yo!'); } }); 

考虑使用Mousetrap 。 ( github )

我知道这个问题是2岁,回答了googlers。