2016-08-09 26 views
0

有下面的代碼:Load事件和幀位置變化

$(function() { 
    $('#ifrm').load(function() { 
    try {    
     window.document.domain = "sub_domain.domain"; 

     document.getElementById("ifrm"); // 1 
     console.log("bla"); 
     document.getElementById("ifrm").id = "new_ifrm"; // 2 
     window.frames[0].location = "http://server_2.sub_domain.domain/.../iframe_2.html"; 
    } 
    catch (e) { 
     console.log("exception!"); 
     alert("Error: " + e); 
    } 
    });    
}); 
... 
<body> 
     <iframe src="http://server_2.sub_domain.domain/.../iframe_1.html" id="ifrm" style="height: 100px"></iframe> 
    </body> 

1)在#2線我改變幀ID,並在下一行我加載新的內容框架現在用NEW ID。 輸出是像這樣:

bla 
bla 
exception! (TypeError: document.getElementById(...) is null) 

的問題是,爲什麼在「load」事件再次改變ID如果幀ID是不是現在「IFRM」,而是「new_ifrm」後,開除了?如果第一行產生一個異常(document.getElementById(...)爲空),爲什麼輸出「bla」?該異常不應立即將執行引導至「catch」塊,忽略異常行(#1)之下的任何內容。

回答

0

問題是爲什麼如果frame id現在不是「ifrm」而是「new_ifrm」,那麼在更改id後再次觸發「load」事件?

事件處理程序綁定到iframe本身。

該ID僅在您撥打getElementById時使用。

如果線#1導致異常

事實並非如此。

調用返回null值的函數是好的。

document.getElementById("ifrm").id = "new_ifrm";當您嘗試在null值上創建屬性時拋出異常。

0

爲什麼如果frame id現在不是「ifrm」而是「new_ifrm」,那麼在更改id後再次觸發「load」事件?

我不認爲這是。但是,當您設置iframe的位置時:會導致它從新URL中加載內容。

如果#1行產生異常(document.getElementById(...)爲空),爲什麼輸出「bla」?該異常不應立即將執行引導至「catch」塊,忽略異常行(#1)之下的任何內容。

該例外不是因爲getElementById(…)返回null。這是因爲你正在從它引用一個屬性。異常正上線拋出標2.(你可以從你browserss開發工具堆棧跟蹤確認)

var x = document.getElementById('foo'); 

x將爲空。這很好用(告訴你沒有這樣的元素)。

var t = document.getElementById('foo').id; 

不是。因爲null沒有任何屬性。所以會失敗。