无法使用事件侦听器阻止键

时间:2010-08-17 18:56:30

标签: javascript internet-explorer events firefox

<body id="body" runat="server" onkeydown="return showKeyCode(event)">

现在每当我按下某个键时,IE8(或在comp模式下)都会抛出一个指向问题的异常 在第x行,恰好是我的身体标签。我怎么能防止这种情况? 据我所知,JS代码应该是IE comp。 (适用于Chrome) 此外,代码在IE和Firefox中不起作用(它不阻止F5和Enter)

- &GT;预期的对象

var version = navigator.appVersion;

function showKeyCode(e) {
    var keycode = (window.event) ? event.keyCode : e.keyCode;

    if ((version.indexOf('MSIE') != -1)) {
        if (keycode == 13) {
            event.keyCode = 0;
            event.returnValue = false;
            return false;
        }
    }
    else {
        if (keycode == 13) {
            return false;
        }
    }
}

我面临的另一个问题是IE中的这个简单的JS&amp; FF(适用于Chrome):

没有任何事情发生 - &GT;预期的对象

 <a onclick="ClearTextboxes();" title="Close" id="close" runat="server">Close</a>

....in script tags:
 function ClearTextboxes() {
     document.getElementById('<%= txtbox_name.ClientID %>').value = '';
     document.getElementById('<%= txtbox_email.ClientID %>').value = '';
     document.getElementById('<%= txtbox_content.ClientID %>').value = '';
     document.getElementById('<%= ResultMail.ClientID %>').style.display = 'none';

 }

1 个答案:

答案 0 :(得分:2)

您的showKeyCode功能中有很多不必要的代码。以下也会这样做;您已经保证e会引用关键事件对象,因为您在event属性中传递onkeydown的方式,并且不需要任何浏览器嗅探一点都不return false是在使用DOM0密钥处理程序时阻止浏览器默认操作的正确方法,因此不需要e.returnValue

你会遇到阻止F5的问题,除非你有一个非常好的理由,否则你不应该这样做,因为用户习惯于执行页面刷新。如果您将功能更改为以下内容,则没有理由不阻止Enter键的默认操作:

function showKeyCode(e) {
    if (e.keyCode == 13) {
        return false;
    }
}