2

我有一段代码适用于 Chrome 和 Firefox,但不适用于 IE8。这个想法是在调整大小时检查文档的高度,以便固定的可滚动区域始终是网页的高度。

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 不同的方式处理它。

NB 在我的 IE8 浏览器的 IE7 模式下,此错误出现在页面加载时,而不是调整大小时。

4

3 回答 3

3

IE<9 不支持绑定。您可以使用提供它的库,例如下划线的 bindjQuery 的 proxy

于 2013-02-14T09:17:28.697 回答
2

Function.bind参考:bind

请注意broser兼容性部分。

而不是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 行开始的整个表达式视为一行。它想告诉你的是,直到版本 9,IE 才支持函数的bind方法

您可以使用来自 MDNhttps://github.com/kriskowal/es5-shim的兼容性 shim ,或一些将其作为静态函数 ( _.bind, $.proxy) 提供的库函数。

于 2013-02-14T09:18:57.517 回答