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);
            }
        }
    }
}

これにより、IE8でのみエラーが発生します。

「ターゲット」がnullであるか、オブジェクトではありません

その行のためにvar tagName = event.target.tagName;

それを修正する方法。Ctrlキーまたは矢印ボタンを押すとエラーが発生します。

4

2 に答える 2

6

eventIEは、オブジェクトをイベントハンドラーに渡しません。代わりにevent、オブジェクトのグローバルプロパティを使用しwindowます。したがって、IEの場合は、window.event代わりに使用します。

最初に、指定された引数をテストするのが一般的な方法です。srcElementIEがの代わりに使用するという事実も考慮に入れる必要があり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 に答える