js中怎样判断当前按住了几个键(按住没松开的键)

heqihua93833 2010-05-25 10:59:41
我用JS做了一个给界面元素添加快捷的黑盒子 在某个界面我同时创建了一个ctrl+q和一个ctrl+shift+q的快捷键 但是只要只要我先创建ctrl+q这个快捷键但我按下ctrl+shift+q的时候他也会执行ctrl+q这个快捷键对于的方法 如果我先创建ctrl+shift+q 当我按下ctrl+q的时候他也会执行 ctrl+shift+q 这个方法 我的判断是这样的
for(var i=0;i<dbKeyArr.length;i++){
if (hotstr=="ctrl+shift"&&e.ctrlKey&&e.shiftKey&&e.keyCode==81){
eval(method1);
return;
}
else if (hotstr=="ctrl"&&e.ctrlKey&&e.keyCode==81){
eval(method1);
return;
}
}
这两个判断 哪个放前面就会执行哪个 我不知道该怎么判断当前按下了几个键盘 现求救于各位大侠们出出注意 要能解决问题 小的定会重谢 我QQ 471278608 你要解决了 我QQ上还有个悬赏 积分你也可以拿了!解决了找我要积分 就是
...全文
508 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heqihua93833 2010-05-25
  • 打赏
  • 举报
回复
//循环组合数组
for(var i=0;i<dbKeyArr.length;i++){
var method=dbKeyArr[i][1];
var hotcode;
var hotstr;
var splitstr=dbKeyArr[i][2];
arr=splitstr.split("+");
if (arr.length==2){
hotcode=arr[0];
hotstr=arr[1];
}
else if(arr.length==3){
hotcode=arr[0];
hotstr=arr[1]+"+"+arr[2];
}
//如果热键是ctrl且同时按下了ctrl和配合键
if (hotstr=="ctrl"&&e.ctrlKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="shift"&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="alt"&&e.altKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="ctrl+shift"&&e.ctrlKey>=1&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="ctrl+alt"&&e.ctrlKey>=1&&e.altKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="shift+alt"&&e.altKey>=1&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}

}
这是我的判断循环 dbKeyArr是组合键的数组 每个数组里面有三个元素 如:dbKeyArr[0]=['xx','test2()','ctrl+81']; 其中xx是这个快捷键的标识 相当于ID的 test2()是按下快捷键后要执行的方法 ctrl+81 代表的是ctrl+q ,81是q(Q)的ASCII码(keyCode码)
heqihua93833 2010-05-25
  • 打赏
  • 举报
回复
function KeyObj(){
//单键数组
this.hotKeyArr=new Array();
this.hotKeyArr[0]=['xx','test2()','-1'];
//组合键数组
this.dbKeyArr=new Array();
this.dbKeyArr[0]=['xx','test2()','ctrl+1'];
}

function KeyObj_create(obj,method,alone,dbstr){
//如果没有传值进来---键盘按下事件处理
if (!obj||obj==""){
if (document.all){
var hotkey=0;
hotkey=event.keyCode;
var e=event;
KeyObj_run(e,hotkey);
}
}
}
/**
* @desc: 执行键盘按下事件
* @param: e 键盘按下的事件源
*/
function KeyObj_run(e,hotkey){
var time=new Date();
var starttime=time.getMilliseconds();
// debugger;
//得到所有快捷键的数组
var hotkeyarr=KeyCode.hotKeyArr;
var dbKeyArr=KeyCode.dbKeyArr;
//KeyCode.init();
//循环单键数组
var arr=new Array();
for (var i=0;i<hotkeyarr.length;i++){
var splitstr=hotkeyarr[i][2];
arr= splitstr.split("+");
//如果ascii码相同而且又是单键
if (hotkey==hotkeyarr[i][2]&&arr.length==1){
eval(hotkeyarr[i][1])
return;
}
}
//循环组合数组
for(var i=0;i<dbKeyArr.length;i++){
var method=dbKeyArr[i][1];
var hotcode;
var hotstr;
var splitstr=dbKeyArr[i][2];
arr=splitstr.split("+");
if (arr.length==2){
hotcode=arr[0];
hotstr=arr[1];
}
else if(arr.length==3){
hotcode=arr[0];
hotstr=arr[1]+"+"+arr[2];
}
//如果方法相同
if (method==dbKeyArr[i][1]){
//如果热键是ctrl且同时按下了ctrl和配合键
if (hotstr=="ctrl"&&e.ctrlKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="shift"&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="alt"&&e.altKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="ctrl+shift"&&e.ctrlKey>=1&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="ctrl+alt"&&e.ctrlKey>=1&&e.altKey>=1&&hotkey==hotcode){
eval(method);
return;
}
if (hotstr=="shift+alt"&&e.altKey>=1&&e.shiftKey>=1&&hotkey==hotcode){
eval(method);
return;
}
}
}
}

上面这些是会用到的一些方法 我都放这里了 麻烦各位大哥在帮忙看看
z2008g 2010-05-25
  • 打赏
  • 举报
回复
代码貌似没有贴完,看不太明白
crazylaa 2010-05-25
  • 打赏
  • 举报
回复
代码不全,调也没法调,只能猜了。结果猜错了,sorry。
crazylaa 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 heqihua93833 的回复:]

那不是每次都执行了么?况且不同的快捷键对应的方法是不同的 这里只是放了一个参数 我要的是当按下对应的快捷键的时候 就执行相应的方法
[/Quote]

这个for不是用来生成快捷键对应的方法的?
heqihua93833 2010-05-25
  • 打赏
  • 举报
回复
那不是每次都执行了么?况且不同的快捷键对应的方法是不同的 这里只是放了一个参数 我要的是当按下对应的快捷键的时候 就执行相应的方法
crazylaa 2010-05-25
  • 打赏
  • 举报
回复
同时把return改为 continue;
crazylaa 2010-05-25
  • 打赏
  • 举报
回复
把else去掉。
YangWenChaoX 2010-05-25
  • 打赏
  • 举报
回复
把方法和return放在最后面执行 !

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧