jQuery keydown函数中实现ctrl或command+enter触发的简便方法
原生jQuery没有内置$.ctrl这类快捷键绑定能力,你当前使用的是第三方快捷键扩展插件提供的方法。要实现ctrl/command+enter触发同一逻辑,有几种低成本的实现方案,不需要大幅改动原有代码:
方案1:复用逻辑绑定两次(最小改动,无需修改插件)
把你原来的业务逻辑抽成公共函数,分别给ctrl+enter和meta+enter绑定同一个处理函数即可:
// 抽离公共处理逻辑 const enterShortcutHandler = function() { // 此处保留你原来的业务代码 } // 分别绑定两个快捷键 $.ctrl('13', enterShortcutHandler) $.meta('13', enterShortcutHandler)
方案2:直接用原生keydown事件实现(无需依赖第三方快捷键插件)
如果你不想依赖插件的封装,可以直接用jQuery自带的keydown事件监听,判断逻辑里同时兼容ctrl和meta键:
$(document).on('keydown', function(e) { // 键码13对应回车键,同时判断ctrl或者command键按下 if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { // 此处保留你原来的业务代码 e.preventDefault() } })
方案3:自定义封装调用方法(适配你想要的调用形式)
如果你想实现类似你设想的统一调用写法,可以自己封装一个jQuery扩展方法,后续所有需要兼容Windows/Mac快捷键的场景都可以复用:
// 先全局扩展jQuery方法 $.ctrlOrMeta = function(keyCode, handler) { $(document).on('keydown', function(e) { if (e.keyCode === Number(keyCode) && (e.ctrlKey || e.metaKey)) { handler.call(this, e) } }) } // 调用方式和你原有写法几乎一致,不需要改动业务逻辑 $.ctrlOrMeta('13', function() { // 此处保留你原来的业务代码 })
另外你设想的$('.ctrl', '.metaKey')('13', function() {})写法不符合jQuery的语法规范,无法直接生效。
内容的提问来源于stack exchange,提问作者Justin Young
相关产品推荐
相关产品推荐

