2

我正在使用 JavaScript 创建一个网站。JS 部分的目的是将我自己的键盘处理程序附加到某些文本字段。我设法将问题缩小到像这个小提琴一样简单的代码:http:
//jsfiddle.net/k9s3n/1/
在 Firefox、Opera 和 Chrome 中,在三个字段中的任何一个中键入一个字符都会导致显示一个警告框与关键代码。然而,在 Internet Explorer(在我的情况下,这是我通常支持的最低版本)中,它只能input3正常工作 - 也就是说,它是释放键时显示对话框的唯一字段。尝试在其他两个框中输入没有结果,它只是在控制台中记录一个错误:(
keyCode is null or isn't an object不确定错误消息是否正确,我是从我的母语翻译过来的)。
无论浏览器如何,似乎只有第三种解决方案有效,但在我的场景中,我必须使用第一个或第二个。

我为进一步调查创建了另一个小提琴:http:
//jsfiddle.net/bSdaJ/
这两个按钮在单击时都会显示一个消息框。在 Firefox、Opera 和 Chrome 中,该框显示“[object MouseEvent]”,而在 IE 中显示“未定义”。
我能做些什么呢?感谢您提前提供任何帮助。

PS 如第一个小提琴所示,如果我使用内联事件处理,一切正常。但是,我在这个项目中的目标是完全分离 HTML 和 JS,所以我不能使用它。我是为朋友做的,我希望 HTML 部分是简单、清晰的标记代码。

4

3 回答 3

4

您不应该使用 DOM 0 事件(通过 HTML 属性附加的事件)。您应该使用事件侦听element.addEventListener器,在 W3C 浏览器和element.attachEventIE 中附加使用。如果您正在构建一个大型网站,您应该使用 JS 框架,但这是一个您没有问过的不同问题。一个框架(最流行的是 jQuery)会提供抽象方法来做到这一点,但在没有抽象方法的情况下,这里有一个简单的函数来实现跨浏览器。

function addEvent(element,evName,fn) {
    if (element.addEventListener) {
        element.addEventListener(evName,fn,false);
    } else if (element.attachEvent) {
        element.attachEvent('on'+evName,function(e) {
            fn(e || window.event);
        });
    }
}

这个简单的函数使用特征检测来规范浏览器之间的不同事件行为。IE 使用不同的监听函数,签名不同,而且 IE 也不遵循 W3C 规范要求处理程序接收事件对象作为参数;相反,它设置了全局 window.event` 属性。

用法示例:http: //jsfiddle.net/k9s3n/3/

另请注意,IE 和 W3C 浏览器对该event.keyCode属性有不同的方法(因为其他浏览器的方法是正确的)。

于 2012-04-11T19:26:59.600 回答
2

试试这个:

function clickHandler(e) {
    if(!e)
        e = window.event;
    alert(e);
}
于 2012-04-11T19:20:09.153 回答
0

试试这个:

function funcToCall(e)
{

    //alert('here');
    var keycode;
    if (window.event)
    {
        if (window.event.keyCode == '112') {  // F1 was pressed

        // call your methods in this area

        window.event.returnValue = false;
        return false;
        }

    }   
    else if(e) 
    {
        if (e.which == '112') {  // F1 was pressed, search for other keycodes

        // call your methods in this area

        e.preventDefault();
        return false;

        }

    }   
}

调用您的文本字段:

onKeyDown="funcToCall(event)"
于 2012-04-12T14:45:37.963 回答