处理鼠标单击和 keydown 或 keypress 的事件(对于非修饰键)

JDL*_*JDL 5 javascript events combinations click keypress

我是 JS 新手,正在尝试自己学习 - 感谢您的帮助!

我试图让一个简单的程序根据单击鼠标时按下的其他键对单击做出不同的响应。

我已经进行了广泛的搜索,但无法找到适用于非修饰键 alt 和 shift 的答案(我在实施时没有遇到任何问题)。但是,我终生无法弄清楚如何使用常规字符键实现相同的结果。

如果使用了 alt 键,则下面的示例(我在本网站的其他评论中找到的)有效。

<div id="targetDiv">I want to put a ding in the universe.</div>

$(function() {
  $("#targetDiv").click(function(event) {
    if (event.altKey) {
       //do something, alt was down when clicked
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,直观的修改不起作用。

例如,其他相同的代码(现在使用 event.keyCode===114)在按下 'r' 键时不起作用(?!)(event.charCode===114 也不起作用):

 <div id="targetDiv">I want to put a ding in the universe.</div>
    $(function() {
          $("#targetDiv").click(function(event) {
            if (event.keyCode===114) {
               //do something, alt was down when clicked
            }
          });
        });
Run Code Online (Sandbox Code Playgroud)

什么地方出了错?

如果我单独听,我可以从 keyPress 中获得功能:

addEventListener("keypress", rIsPressed, false);

function rIsPressed(event){
    if(event.keyCode===114){    
    console.log("the 'r' key is pressed");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将字符按键与鼠标单击或什至字符按键与修饰键按键配对时,似乎没有任何效果:

addEventListener("keypress", rIsPressed, false);

function rIsPressed(event){
    if((event.keyCode===114) && (event.altKey)){    
    console.log("the 'alt' and 'r' keys are pressed");
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我在所有这些示例中都尝试过 keydown 而不是 keypress,但没有成功。

请就我遗漏或忽略的内容提出建议 - 将字符键按下/按下与修饰键或鼠标单击配对有什么问题!?

谢谢!!

dlk*_*ulp 5

正如我在上面评论的那样,点击事件没有一个名为的属性,keyCode这样做是event.keyCode行不通的。control 和 alt 起作用的唯一原因是因为它们是 click 事件的属性,event.ctrlKeyevent.altKey. 您可以更有创意并使用这样的东西,尽管我真的不知道您需要什么:

var currKey = null;

$("#targetDiv").click(function (event) {
    if (currKey != null) {
        $("#targetDiv").text(currKey);
    }
});
$(window).keydown(function (event) {
    currKey = event.which;
});
$(window).keyup(function (event) {
    currKey = null;
});
Run Code Online (Sandbox Code Playgroud)

当 keydown 被触发时,它存储键代码,当 keyup 被触发时,它会清除 var。只有当 var 显示非空值时,click 事件中的内容才允许运行。