例子

2011-04-20 81 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