img.attachEvent("onclick", function(img){
alert(img.id);
}.bind(null,img));
我如何在IE 8中完成这项工作?或者最直接的选择是什么?
答案 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