我是JS的新手,并试图自己学习 – 感谢您的帮助!
我试图让一个简单的程序以不同的方式响应点击,具体取决于鼠标点击时按下的其他键.
我已经搜索了很多,并且无法找到适用于非修改键alt和shift的答案(我没有遇到任何麻烦).但是,我不能为我的生活弄清楚如何用常规字符键实现相同的结果.
如果使用alt键,则The example below (which I found in other comments on this site)有效.
<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
}
});
});
但是,直观的修改不起作用.
例如,当按下’r’键时,其他相同的代码(现在使用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,但没有成功.
请注意我缺少或忽略的内容 – 将字符键配对/按下修改键或鼠标点击有什么问题!
谢谢!!
解决方法:
正如我上面评论的那样,click事件没有名为keyCode的属性,因此无法使用event.keyCode.控制和alt工作的唯一原因是因为它们是click事件的属性,event.ctrlKey和event.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;
});
这会在触发keydown时存储密钥代码,当触发keyup时它会清除var.只有当var显示除null之外的其他内容时,才允许运行click事件中的内容.