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

jQuery .keypress()可以同时检测多个键吗?

jQuery .keypress()可以同时检测多个键吗?

蛊毒传说 2019-09-21 14:56:13
jQuery是否有办法检测到同时按下了多个键?是否有其他选择可以同时按下两个键?
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

这取决于。对于“正常”的钥匙,这意味着非Shift,Ctrl,ALT,( CMD),答案是否定的,该事件处理程序将赶上/火在队列中,一个接一个。


对于我上面提到的修饰键,事件对象上有一个属性。


例:


$(document).bind('keypress', function(event) {

    if( event.which === 65 && event.shiftKey ) {

        alert('you pressed SHIFT+A');

    }

});


其他属性是:


event.ctrlKey

event.altKey

event.metaKey


查看完整回答
反对 回复 2019-09-21
?
隔江千里

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

如果您只想在连续按下多个键时触发处理程序,请尝试以下操作:


jQuery.multipress = function (keys, handler) {

    'use strict';


    if (keys.length === 0) {

        return;

    }


    var down = {};

    jQuery(document).keydown(function (event) {

        down[event.keyCode] = true;

    }).keyup(function (event) {

        // Copy keys array, build array of pressed keys

        var remaining = keys.slice(0),

            pressed = Object.keys(down).map(function (num) { return parseInt(num, 10); }),

            indexOfKey;

        // Remove pressedKeys from remainingKeys

        jQuery.each(pressed, function (i, key) {

            if (down[key] === true) {

                down[key] = false;

                indexOfKey = remaining.indexOf(key);

                if (indexOfKey > -1) {

                    remaining.splice(indexOfKey, 1);

                }

            }

        });

        // If we hit all the keys, fire off handler

        if (remaining.length === 0) {

            handler(event);

        }

    });

};

例如,要在圣火上


jQuery.multipress([83, 84], function () { alert('You pressed s-t'); })


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 750 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信