例子

2011-04-20 50 views
1

没有人知道如何工作的obj.attachEvent上的IE浏览器?例子

我尝试了几个例子,但他们没有工作。这是否与ie7兼容?

什么我想是这样的:

var onload = function() { 
     console.log("intercepting: " + this.status + " " + this.responseText); 
    }; 

if($.browser.msie){ 
    console.log("it's IE..."); 
    this.attachEvent("load", onload); 
} 

以上所有的XMLHtppRequest内。

+0

什么是'这个'? ;-) – 2011-04-20 10:01:01

回答

2

你可能想这个函数分配给xhrObject.onreadystatechange

+0

是的Marcel,但我必须设置一个附件,以便捕获对象事件 – dyoser 2011-04-20 10:07:08

+0

@dyoser:哪个对象?再说一次:你的上下文中的“this”是什么? – 2011-04-20 10:11:02

+0

似乎铬不喜欢这个:( – dyoser 2011-04-20 10:32:27

3

attachEvent,你需要"on"前缀事件名称,例如

this.attachEvent("onload", onload); 

这不同于将被省略的DOM事件addEventListener,这就需要"on"

正如Marcel指出的那样,对于XMLHttpRequests,您需要绑定到onreadystatechange,并检查处理程序内部的readyState属性。 XMLHttpRequest不支持onload

在另一方面,你应该避免检查浏览器和检查功能的支持来代替。 Internet Explorer 9的支持addEventListener,例如:

var onreadystatechange = function() { 
    if (this.readyState == 4) 
     console.log("intercepting: " + this.status + " " + this.responseText); 
}; 

if(!this.addEventListener && this.attachEvent){ 
    console.log("it's IE<9..."); 
    xhr.attachEvent("onreadystatechange", onreadystatechange); 
} 
else 
    // use addEventListener 

在现实中,虽然,你不会一个XHR对象上使用attachEventaddEventListener;我怀疑IE7和更低版本会玩这个,所以你只需直接绑定到事件属性:

xhr.onreadystatechange = function() { 
    if (this.readyState == 4) 
     console.log("intercepting: " + this.status + " " + this.responseText); 
} 
+0

难道IE的实施XHR支持'onload'事件 – 2011-04-20 10:03:33

+0

我试图用“ onload“,但它不起作用,似乎ie的xhr没有实现这一点。 – dyoser 2011-04-20 10:05:19

+0

好点但是它并没有很好地附着在ie8上 – dyoser 2011-04-20 10:08:45