我用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上还有个悬赏  积分你也可以拿了!解决了找我要积分 就是

解决方案 »

  1.   

       把方法和return放在最后面执行 !
      

  2.   


    这个for不是用来生成快捷键对应的方法的?
      

  3.   

    代码不全,调也没法调,只能猜了。结果猜错了,sorry。
      

  4.   

    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;
         }
        }                           
        }  
    }    上面这些是会用到的一些方法 我都放这里了  麻烦各位大哥在帮忙看看
      

  5.   

    //循环组合数组
        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码)