Javascript - IE8替代bind()

时间:2013-11-16 19:22:59

标签: javascript

img.attachEvent("onclick", function(img){

 alert(img.id);

}.bind(null,img)); 

我如何在IE 8中完成这项工作?或者最直接的选择是什么?

3 个答案:

答案 0 :(得分:4)

我找到了一个填充物here

Function.prototype.bind = Function.prototype.bind || function(b) {
    if (typeof this !== "function") {
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }

    var a = Array.prototype.slice;
    var f = a.call(arguments, 1);
    var e = this;
    var c = function() {};
    var d = function() {
      return e.apply(this instanceof c ? this : b || window, f.concat(a.call(arguments)));
    };

    c.prototype = this.prototype;
    d.prototype = new c();

    return d;
};

答案 1 :(得分:1)

使用event.srcElement

img.attachEvent("onclick", function(ev){
    alert(ev.srcElement.id);
});

我会给你一个JSFiddle,但JSFiddle在IE8中失败。

编辑:另一种解决方案是使用闭包/变量解决方案。像这样:

(function(){
    var _img=img;
    _img.attachEvent("onclick",function(ev){
        alert(_img.id);
    });
})();

这将创建img的本地副本,以便您可以在事件侦听器中使用它。

除此之外,我的建议是完全忘记IE 8。 (J / K)

答案 2 :(得分:-3)

我想把这个添加为评论,但让我发帖。 “请使用jQuery并从这些类型的问题中节省时间。

如果在不久的将来碰巧使用jQuery

$(document).on('click', '.class', function() {
    // code here
});

下面的页面上有一个很好的compatability脚本。只需将其复制并粘贴到您的脚本中即可http://dochub.io/#javascript/function.bind