我下面的javascript代码完成的功能是屏蔽键盘按键。在firefox中都可以正常运行。但是在ie中运行时,总提示Event未定义。不知道怎么修改,请高手指点迷津。谢了先。document.oncontextmenu = new Function ("return false");// disable "Backspace" key except when focus on "input text" or "password" or "textarea" form element
if (typeof window.event == 'undefined')
{
document.onkeypress = function(e)
{
var realkey=String.fromCharCode(e.which);

if (e.ctrlKey || e.altKey || e.keyCode == 112 || e.keyCode == 113 
|| e.keyCode == 114 || e.keyCode == 116 || e.keyCode == 117 
|| e.keyCode == 118 || e.keyCode == 120 || e.keyCode == 121 || e.keyCode == 122 
|| "'" == realkey)
{
e.preventDefault();
}

var test_var=e.target.nodeName.toUpperCase();
if (e.target.type) var test_type=e.target.type.toUpperCase();
if ((test_var == 'INPUT' && (test_type == 'TEXT' || test_type == 'PASSWORD')) || test_var == 'TEXTAREA')
{
return e.keyCode;
}
else if (e.keyCode == 8 || "/" == realkey)
{
e.preventDefault();
}
}
}
else
{
document.onkeydown = function()
{

var realkey = String.fromCharCode(event.which);
if (event.ctrlKey || event.altKey || event.keyCode == 112 || event.keyCode == 113 
|| event.keyCode == 114 || event.keyCode == 116 || event.keyCode == 117 
|| event.keyCode == 118 || event.keyCode == 120 || event.keyCode == 121 || event.keyCode == 122 
|| "'" == realkey)
{
event.returnValue=false;
}

var test_var=event.srcElement.tagName.toUpperCase();
if (event.srcElement.type) var test_type=event.srcElement.type.toUpperCase();
if ((test_var == 'INPUT' && (test_type == 'TEXT' || test_type == 'PASSWORD')) || test_var == 'TEXTAREA')
{
return event.keyCode;
}
else if (event.keyCode == 8 || "/" == realkey)
{
event.returnValue=false;
}
}
}var midclick = false;
function mouseDown(e) 
{
if (!e) var e = event;
if (e.which) midclick = (e.which == 2);
else if (e.button) midclick = (e.button == 1);
if (midclick)
{
e.preventDefault();
//return false;
}}
document.onmousedown = mouseDown;
document.captureEvents(Event.KEYDOWN | Event.MOUSEDOWN);var omitformtags=["input", "textarea"];
omitformtags=omitformtags.join("|");function disableselect(e)
{
var targetTag = e.target.tagName.toLowerCase();
if (targetTag == "a") targetTag = "anchor";

if (omitformtags.indexOf(targetTag)==-1) return false;
}function reEnable()
{
return true;
}if (typeof document.onselectstart!="undefined") document.onselectstart=new Function ("return false");
else
{
document.onmousedown=disableselect;
document.onmouseup=reEnable;
}

解决方案 »

  1.   

    else
    {
    document.onkeydown = function()
    {
    var event=window.event  //加这个试试
    var realkey = String.fromCharCode(event.which);
      

  2.   

    问题出在下面这句上
    document.captureEvents(Event.KEYDOWN | Event.MOUSEDOWN);
    IE中可以设置setCapture,也可对单个对象设置,然后会扩充到整个文档,包括IE窗口外的地方
    <SCRIPT LANGUAGE="JavaScript" defer>
    <!--
    document.body.setCapture()
    //-->
    </SCRIPT>
      

  3.   

    非常感谢二位对问题的关注。针对第一个方案,我加了var event=window.event之后仍然出现错误:‘Event’未定义。针对第二个方案:我把document.body.setCapture()加到这段Javascript代码最前边(因为我每个jsp页面都要用上边这段代码,因此将这段代码写入在一个.js文件中),运行之后,仍然出现错误:‘Event’未定义。是不是我对二位意思理解有偏差,还请再次指点。
      

  4.   

    Event.KEYDOWN
    是Netscape等非IE里的,需要判断浏览器类型的
    参见
    http://www.aspxuexi.com/vbscript/2006-4-26/javascript_key.htm
    的解释
      

  5.   

    TO 楼主,不是把代码加到前面去就可以了,而是IE根本就不认Event
    区分下浏览器,做不同处理吧