var instr="";//保存ctrl/shift/alt键的按下记录 function keyDown(e,keyId) { var isEnd=false;//判断是否按了字母或数字 var currKey=0,e=e||event; var ctrl=e.ctrlKey,shift=e.shiftKey,alt=e.altKey; currKey=e.keyCode||e.which||e.charCode; var keyName="";//按下的键值 if(currKey==17) keyName="CTRL"; else if(currKey==16)keyName="SHIFT"; else if(currKey==18) keyName="ALT"; else if((64< currKey&&currKey<91)||(48< currKey&&currKey<57)){//字母或数字情况 keyName= String.fromCharCode(currKey) isEnd=true; } var focusId= document.activeElement.id;//获取当前焦点所在的控件ID if(focusId==keyId&&keyName!=""){ var keyArray=instr.split("+"); var isExist=false;//判断ctrl/shift/alt键是否已经被记录 for(var i=0;i < keyArray.length;i++){ if(keyName==keyArray[i])isExist=true; } if((ctrl||shift||alt)&&!isExist){//当前按下键(ctrl/shift/alt键之一)未按下 if(!isEnd){//假如不是输入字母或数字 ,就保存当前按下键的值记录 if(instr!="")instr=instr+"+"+keyName; else instr=keyName; } else{//否则设置将所有组合键的值保存输入控件 $("#"+keyId).val(""); $("#"+keyId).val(instr+"+"+keyName); } } } } function keyUp(e) { var currKey=0,e=e||event; currKey=e.keyCode||e.which||e.charCode; var ctrl=e.ctrlKey,shift=e.shiftKey,alt=e.altKey; if(!ctrl) inStrCheck("CTRL"); if(!shift)inStrCheck("SHIFT"); if(!alt) inStrCheck("ALT"); } /** *如果(ctrl/shift/alt键之一)松开, *遍历丢弃松开的键(ctrl/shift/alt键之一) *重修赋值给instr **/ function inStrCheck(keyName){ var keyArray=instr.split("+"); instr=""; for(var i=0;i < keyArray.length;i++){ if(keyName!=keyArray[i])instr==""?instr=keyArray[i]:instr=instr+"+"+keyArray[i]; } } document.onkeydown = function(e){ keyDown(e,"requestKey");//需要获取值的输入控件ID }; document.onkeyup = keyUp;