4
document.onkeydown = function(event) {
    var tagName = event.target.tagName;
    if (tagName != 'INPUT' && tagName != 'TEXTAREA' && !event.alt && event.control) {

        if (event.ctrlKey && event.keyCode == 37) {
            if (_this.currentPage > 1) {
                window.location.href = _this.baseUrl.replace(/%page%/i, _this.currentPage + 1);
            }
        } else if (event.ctrlKey && event.keyCode == 39) {
            if (_this.currentPage < _this.pagesTotal) {
                window.location.href = _this.baseUrl.replace(/%page%/i, _this.currentPage - 1);
            }
        }
    }
}

这仅在 IE 8 中给我一个错误:

'target' 为 null 或不是对象

对于那条线var tagName = event.target.tagName;

如何解决。当我按下 Ctrl 或箭头按钮时发生错误。

4

2 回答 2

6

IE 不会将event对象传入事件处理程序。相反,它们使用对象的全局event属性window。所以对于 IE,你会使用它window.event

首先测试提供的参数是常见的做法。您还必须考虑 IE 使用srcElement而不是target. 为了解决所有这些问题,请使用与此类似的内容:

document.onkeydown = function(event) {
    event = event || window.event;
    var tagName = (event.target || event.srcElement).tagName;
    // Keep up the good work...
}

这应该可以解决问题。

于 2012-11-12T02:04:36.670 回答
3

像这样做:

event = event || window.event;
var tagName = (event.target || event.srcElement).tagName.toUpperCase();
于 2012-11-12T02:07:54.140 回答