【个人意见,仅供参考】试一试<script language="javascript">
function $(objName){
return document.getElementById(objName);
}function addEvent(obj,evt,fn){
if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}
else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}
}function AdvancedListener(){
this.MouseIsDown = false;
this.CtrlIsPressed = false;
this.ShiftIsPressed = false;
}AdvancedListener.prototype.record = function(e){
if (e == 'mousedown'){
this.MouseIsDown = true;
}
if (e == 'mouseup'){
this.MouseIsDown = false;
}
if (e == 'keydown' && event.keyCode==17){ //ctrl is down
this.CtrlIsPressed = true;
}
if (e == 'keydown' && event.keyCode==16){ //shift is down
this.ShiftIsPressed = true;
}
if (e == 'keyup' && event.keyCode==17){ //ctrl is up
this.CtrlIsPressed = false;
}
if (e == 'keyup' && event.keyCode==16){ //shift is up
this.ShiftIsPressed = false;
}
}var listener = new AdvancedListener();
function StartListening(){
addEvent(document.body,'keydown',function(){listener.record('keydown');Check();});
addEvent(document.body,'keyup',function(){listener.record('keyup');Check();});
addEvent(document.body,'mousedown',function(){listener.record('mousedown');Check();});
addEvent(document.body,'mouseup',function(){listener.record('mouseup');Check();});
}//test code here...
function Check(){
$('container').innerHTML = '';
if(listener.CtrlIsPressed ){
$('container').innerHTML += 'Ctrl pressed<br>';
}
if(listener.ShiftIsPressed ){
$('container').innerHTML += 'Shift pressed<br>';
}
if(listener.MouseIsDown){
$('container').innerHTML += 'MouseLeftButton pressed<br>';
}
if(listener.CtrlIsPressed && listener.MouseIsDown){
$('container').innerHTML += '<h1>Ctrl + Mouse!!!</h1><br>';
}
if(listener.ShiftIsPressed && listener.MouseIsDown){
$('container').innerHTML += '<h1>Shift + Mouse!!!</h1><br>';
}
}
</script>
<body onload="StartListening();">
<div>按一按Ctrl,Shift和鼠标左键</div>
<div id="container"></div>
</body>

解决方案 »

  1.   

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <script type="text/javascript">
                function $(id){
                    return (document.getElementById(id));
                }
                
                function isKeyPressed(evt){
                    e = window.event || evt
                    var msg = "";
                    if (e.altKey) {
                        msg += "The ALT key was pressed!";
                    }
                    if (e.ctrlKey) {
                        msg += "The Ctrl key was pressed!";
                    }
                    if (e.shiftKey) {
                        msg += "The Shift key was pressed!";
                    }
                    var o = $("div1");
                    o.innerHTML = msg;
                }
            </script>
        </head>
        <body onkeydown="isKeyPressed(event);" onkeyup="isKeyPressed(event);">
            <p>
                按下Ctrl,Alt,Shift键,看看效果。
            </p>
            <div id="div1">
            </div>
        </body>
    </html>
      

  2.   

    改一下响应鼠标事件。<html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <script type="text/javascript">
                function $(id){
                    return (document.getElementById(id));
                }
                
                function isKeyPressed(evt){
                    e = window.event || evt
                    var msg = "";
                    if (e.altKey) {
                        msg += "The ALT key was pressed!";
                    }
                    if (e.ctrlKey) {
                        msg += "The Ctrl key was pressed!";
                    }
                    if (e.shiftKey) {
                        msg += "The Shift key was pressed!";
                    }
                    var o = $("div1");
                    o.innerHTML = msg;
                }
            </script>
        </head>
        <body onmousedown="isKeyPressed(event);">
            <p>
                按下Ctrl,Alt,Shift键,看看效果。
            </p>
            <div id="div1">
            </div>
        </body>
    </html>
      

  3.   

    看看addEventListener(非IE)和addEvent(IE)方法
      

  4.   

    可以参考楼上的思路,用keycode来检测。但实际应用场景一半比较麻烦,例如你要监听Ctrl+A,那么你必须监听Ctrl的keydown,然后等候A的keydown,这才是一个Ctrl+A。如果Ctrl的keydown后又keyup了,这是A的keydown就没意义了。我的意思是,你要监听组合键,就必须记录每一个键的按下状态。
      

  5.   

    冤枉呀!
    我没用keycode呀!
    event里面本来就有 altKey,ctrlKey,shiftKey来标识状态的。
    为什么大家还在热火朝天的讨论用keycode呢。
    是不是我看错题了?当然用keycode也可以,只是没有必要呀。同时,再贴一个以前回帖时做的,
    实现游戏中多键同时按下时的键盘处理。
    给大家参考一下。
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        </head>
        <script>
            function $(id){
                return (document.getElementById(id));
            }
            
            var keybuf = {};
            function keydown(e){
                var evt = e || window.event;
                var o = $("div1");
                keybuf[evt.keyCode] = true;
                whatIsDown();
            }
            
            function keyup(e){
                var evt = e || window.event;
                var o = $("div1");
                keybuf[evt.keyCode] = false;
                whatIsDown();
            }
            
            function keypress(e){
                whatIsDown();
            }
            
            function whatIsDown(){
                var o = $("div1");
                var str = "";
                for (k in keybuf) {
                    if (keybuf[k] == true) {
                        str += k + "; ";
                    }
                }
                o.innerHTML = str;
            }
        </script>
        <body>
            <input type="text" value="" onkeydown="keydown(event);" onkeyup="keyup(event);" onkeypress="keypress(event);"/>
            <div id="div1">
            </div>
        </body>
    </html>