Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8没有得到';这';来自attachEvent_Javascript - Fatal编程技术网

Javascript IE8没有得到';这';来自attachEvent

Javascript IE8没有得到';这';来自attachEvent,javascript,Javascript,这是一个更大类的方法 myMethod.prototype.click=function(func){ if (window.addEventListener) { this.selArray[i].addEventListener('click', func, false); } else if (window.attachEvent) { this.selArray[i].attachEvent('onclick', func); } return this; } 如果我

这是一个更大类的方法

myMethod.prototype.click=function(func){

 if (window.addEventListener) {
  this.selArray[i].addEventListener('click', func, false);
} else if (window.attachEvent) {
  this.selArray[i].attachEvent('onclick', func);
}


return this;

}
如果我鼓动传递这个函数

myInstance.click(

    function () {
    alert(this.id)
    }
);

…在IE 8中发出“未定义”警报,但返回在Firefox和Safari中单击事件附加到的DOM对象的ID。

对,
attachEvent
的工作方式与
addEventListener
的工作方式不同。您可以这样做:

if (window.addEventListener) {
  this.selArray[i].addEventListener('click', func, false);
} else if (window.attachEvent) {
  this.selArray[i].attachEvent('onclick', func.bind(this.selArray[i]));
}
它使用
函数#bind
来确保
是挂接事件的元素。在较旧的浏览器(如IE8)上,必须使用shim/polyfill
函数#bind
,搜索“es5 shim”中的选项

或者,如果您不想使用
函数#bind
,请在调用
时使用闭包,然后单击

myMethod.prototype.click=function(func){
    var elm = this.selArray[i];
    if (window.addEventListener) {
      elm.addEventListener('click', func, false);
    } else if (window.attachEvent) {
      elm.attachEvent('onclick', function(e) {
        return func.call(elm, e || window.event);
      });
    }

    return this;
}

旁注:仅提供
attachEvent
的浏览器在事件对象上也没有
preventDefault
stopPropagation
。一个彻底的垫片(比如jQuery、PrototypeJS或其他各种库中的垫片)会添加这些内容。
preventDefault
的等价物是
e.returnValue=false
stopPropagation
的等效值为
e.cancelBubble=true

好吧,那么IE8&9就不需要这些了?@user1209203:IE8需要。IE9及以上版本不支持,因为它们提供了
addEventListener
。好的,谢谢您的帮助,我可能会让IE8用户升级他们的浏览器。@user1209203:由您决定。首先,我可能会检查一下你的站点统计数据,因为一般统计数据显示IE8仍然有6%(statcounter)到21%(net applications)的全局浏览器用户。。。但和往常一样,重要的是你自己网站的统计数据。我的意思是,这是浏览器最微不足道的差异之一,需要处理…:-)