为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

12345678_0001 2019-03-21 19:19:08
当用户添加一个网站到收藏夹时(按下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>
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

$.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!');

}

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


$(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 来用,如果只有这一处用到的话,就用下面这段吧。


查看完整回答
反对 回复 2019-04-12
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-04-12
  • 2 回答
  • 0 关注
  • 683 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号