处理鼠标单击和键控或按键事件(非修饰键)

时间:2015-03-04 06:34:05

标签: javascript events click combinations keypress

我是JS的新手,并试图自己学习 - 感谢您的帮助!

我试图让一个简单的程序以不同的方式响应点击,具体取决于鼠标点击时按下的其他键。

我搜索得很远,并且找不到适用于非修改键alt和shift的答案(我没有遇到任何问题)。但是,我不能为我的生活找出如何使用常规字符键获得相同的结果。

The example below (which I found in other comments on this site)在使用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
    }
  });
});

然而,直观的修改不起作用。

例如,其他相同的代码(现在使用event.keyCode === 114)在(?!)时不起作用。按下了键(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
            }
          });
        });

出了什么问题?

如果我单独听一下,我就能从keyPress中获取功能:

addEventListener("keypress", rIsPressed, false);

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

然而,当我尝试将字符按键与鼠标点击配对,或者甚至是使用修饰键按键的字符按键时,似乎没有任何效果:

addEventListener("keypress", rIsPressed, false);

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

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

请注意我缺少或忽略的内容 - 将字符键配对/按下修改键或鼠标点击有什么问题!?

谢谢!

1 个答案:

答案 0 :(得分:4)

正如我上面评论的那样,click事件没有名为keyCode的属性,因此event.keyCode无法正常工作。控制和alt工作的唯一原因是因为它们是点击事件{@ 1}}和event.ctrlKey的属性。你可以更有创意,并使用这样的东西,虽然我真的不知道你需要什么:

event.altKey

这会在触发keydown时存储密钥代码,当触发keyup时它会清除var。如果var显示的不是null,则只允许运行click事件中的内容。