Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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兼容模式|类型不匹配|事件_Javascript - Fatal编程技术网

Javascript IE8兼容模式|类型不匹配|事件

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

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(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+
IE8兼容模式(IE7)错误:

网页错误详细信息

用户代理:Mozilla/4.0(兼容;MSIE8.0;WindowsNT6.1;WOW64; Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729)时间戳:星期三,2015年8月12日16:41:11 UTC


根据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