按下键并同时单击

Zol*_*oli 5 javascript jquery

如何合并按键和点击?我的意思是当用户按下回车并在同一时间点击某处我需要调用一个功能.

$(document).keypress(function(e) {
    var code = e.keyCode || e.which;
    if(code == 13) {
        alert('keypress');
    }
});
$(document).on( "click", function() {
    alert('click');
});
Run Code Online (Sandbox Code Playgroud)

我有这个代码,但我无法合并它(通常我不使用jQuery/javascript).

Cla*_*edi 11

像这样的东西可能会成功

var pressingEnter = false;
$(document).on({
    keydown: function(e) {
        if(e.which == 13) {
            // enter is being pressed, set true to flag variable
            pressingEnter = true;
        }
    },
    keyup: function(e) {
        if(e.which == 13) {
            // enter is no longer pressed, set false to flag variable
            pressingEnter = false;
        }
    },
    click: function() {
        if (pressingEnter) {
           console.log('click and enter pressed');
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

BTW:没有必要这样做,var code = e.keyCode || e.which;因为jQuery为你解决了这个问题.您可以e.which在任何浏览器上使用.

编辑

此版本应允许任何按键/鼠标点击顺序.我假设只捕获了左键单击.逻辑来处理输入+鼠标点击被放置在keydownmousedown(可能被移动到keyupmouseup是否更有意义)

改变alertconsole.log自第一防止mouseup被触发事件.现在,我们有数百种更好的方式向用户显示消息而不是内置警报弹出窗口,所以我假设它不是必需的.

var pressingEnter = false;
var clickingMouseButton = false;
$(document).on({
    keydown: function(e) {
        if(e.which == 13) {
            pressingEnter = true;
        }

        if (clickAndEnterPressing()) {
            console.log('click and enter pressed');
        }        
    },
    keyup: function(e) {
        if(e.which == 13) {
            pressingEnter = false;
        }
    },
    mousedown: function(e) {
        if (e.which == 1) {
            clickingMouseButton = true;
        }

        if (clickAndEnterPressing()) {
            console.log('click and enter pressed');
        }           
    },
    mouseup: function(e) {
        if (e.which == 1) {
            clickingMouseButton = false;
        }
    }
});

function clickAndEnterPressing() {
    return pressingEnter && clickingMouseButton;
}
Run Code Online (Sandbox Code Playgroud)