2

Chrome と Firefox では動作するが、IE8 では動作しないコードがあります。サイズ変更時にドキュメントの高さをチェックして、固定スクロール可能領域が常に Web ページの高さになるようにするという考え方です。

24    MyJavascript.prototype.handleWindow_onResize = function (e) {
25        window.clearTimeout(this.windowResizeTimer);
26        this.windowResizeTimer = setTimeout(function () {
27            this.doStuff();
28        }.bind(this), 20);
29    };

IE8 でウィンドウのサイズを変更すると、次のエラーが表示されます。

Message: Object doesn't support this property or method
Line: 26
Char: 9
Code: 0
URI: XXX

誰かが私が間違っていることを見ることができますか? 「これ」が問題だと思いますが、IE8がChromeやFFとは異なる方法でそれを扱っている理由がわかりません。

注: 私の IE8 ブラウザーの IE7 モードでは、このエラーはサイズ変更ではなく、ページの読み込み時に表示されます。

4

3 に答える 3

3

バインドは IE<9 ではサポートされていません。underscore の bindjQuery の proxyなど、それを提供するライブラリを使用できます。

于 2013-02-14T09:17:28.697 に答える
2

リファレンスを見てFunction.bindください: bind

ブラウザの互換性セクションに注目してください。

関数の代わりにbind、コードをクロージャーで書き直すことができます:

MyJavascript.prototype.handleWindow_onResize = function (e) {
    window.clearTimeout(this.windowResizeTimer);
    var self = this;
    this.windowResizeTimer = setTimeout(function () {
        self.doStuff();
    }, 20);
};
于 2013-02-14T09:17:48.450 に答える
0

紛らわしいエラー行番号のように聞こえます。IE は 26 行目から始まる式全体を 1 行として扱うと思います。伝えたいことは、関数のbindメソッドがバージョン 9 まで IE でサポートされていないということです。

MDNの互換性シム、https://github.com/kriskowal/es5-shim、またはそれを静的関数 ( _.bind$.proxy) として提供するいくつかのライブラリ関数を使用できます。

于 2013-02-14T09:18:57.517 に答える