jquery如何捕获用户按下了Ctrl+d键?

当用户添加一个网站到收藏夹时(按下Ctrl+d键)时触发一个事件,如下代码是网上摘抄的一段用Ctrl+Enter键发送内容的js代码,稍微修改了一下,将“Enter”键ASCII码13改为“d”键ASCII码100,为什么一直没有反应?

<script>
$(document).keypress(function(e){ 
if(e.ctrlKey && e.which == 100 || e.which == 10) 
    { 
        triggerSomething();
    }
})
function triggerSomething()
    {
        document.write('add bookmark successfully!');
    }
</script>
阅读 10.8k
2 个回答
$.ctrl = function(key, callback, args) {
    var isCtrl = false;
    $(document).keydown(function(e) {
        if(!args) args=[];

        if(e.ctrlKey) isCtrl = true;
        if(e.keyCode == key.charCodeAt(0) && isCtrl) {
            callback.apply(this, args);
            return false;//you can remove this line if you need bookamrk
        }
    }).keyup(function(e) {
        if(e.ctrlKey) isCtrl = false;
    });        
};

$.ctrl('D', function() {
   triggerSomething();
});

function triggerSomething() {
    document.write('add bookmark successfully!');
}

其实你是弄错了 DASCII 码和事件类型,你先测试下:

$(document).keydown(function(e) {
    alert(e.which);
})

此时你点击 D 键,你会发现是以大写 D 的值为准,为68。所以你这么写:

$(document).keydown(function(e){ 
    if(e.ctrlKey && e.which == 68) 
    { 
        triggerSomething();
    }
})
function triggerSomething()
{
    document.write('add bookmark successfully!');
}

上面那段代码可以 handle 更多的 ctrl + key 事件,如果在你的项目里有很多地方会出现 ctrl + key,那么可以把第一段代码当做一个 plugin 来用,如果只有这一处用到的话,就用下面这段吧。

键盘上的 ASCII 码以大写为准, 所以 DSACII 码并不是 100 而是 68.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题