Javascript IE8兼容模式|类型不匹配|事件
DOX.js 初始化:Javascript IE8兼容模式|类型不匹配|事件,javascript,Javascript,DOX.js 初始化: function DOX_(win, doc){ var that = this; this.events = {}; this.onload = function(func){ var prev_onload = win.onload; this.addEvent(win, doc, 'load', function(win_, event_){ if(pre
function DOX_(win, doc){
var that = this;
this.events = {};
this.onload = function(func){
var prev_onload = win.onload;
this.addEvent(win, doc, 'load',
function(win_, event_){
if(prev_onload)
prev_onload();
func(win_);
that.removeEvent(win_,event_);
}
);
}
this.addEvent = function(win, doc, event_, func){
if(win.addEventListener || doc.addEventListener){
var compat_event = win.addEventListener || doc.addEventListener;
if(event_ in this.events){
compat_event(event_, function(){
func(win, event_);
this.events[event_](win, event_);
}, true);
}else{
compat_event(event_, function(){
func(win, event_);
}, true);
}
this.events[event_] = func;
}else if(win.attachEvent || doc.attachEvent){
var compat_event = win.attachEvent || doc.attachEvent;
var ie_event = 'on' + event_;
if(ie_event in this.events){
compat_event(ie_event, function(){
func(win, ie_event);
this.events[ie_event](win, ie_event);
});
}else{
compat_event(ie_event, function(){
func(win, ie_event);
});
}
this.events[ie_event] = func;
}
}
this.removeEvent = function(win, doc, event_){
if(win.removeEventListener || doc.removeEventListener){
var compat_event = win.removeEventListener || doc.removeEventListener;
compat_event(event_, this.events[event_], true);
this.events[event_] = null;
delete this.events[event_];
}else if(win.detachEvent || doc.detachEvent){
var compat_event = win.detachEvent || doc.detachEvent;
var ie_event = 'on' + event_;
compat_event(ie_event, this.events[ie_event]);//type mismatch error
this.events[event_] = null;
delete this.events[ie_event];
}
}
}
我正在为以下内容创建跨浏览器兼容性框架:
- IE7+
- Firefox38+
- 铬43+
- 网景7+
- 歌剧30+
- Safari 5.1.7+
根据IE7文档,attachEvent在一个或多个参数未定义时引发异常“类型不匹配”
this.events[ie\u event]
返回未定义的
-Nallar的积分Try
console.log(typeof(compat_事件))代码>在出现不匹配错误的行之前。它记录了什么?从一些测试中,IE给出了当attachEvent
的任何参数未定义时的“类型不匹配”错误。因此,由于某些原因,this.events[ie\u event]
必须是未定义的。谢谢,问题是ie\u event返回未定义。谢谢
var DOX = new DOX_(window, document);
DOX.onload(function(){
alert("hello world");
});
Message: Type mismatch.
Line: 68
Char: 4
Code: 0
URI: http://nportal.rrh.com/JS/DOX.js