2011-05-20 78 views
1

我有一個問題,使用Javascript來隱藏一個元素。在IE9中的Javascript緩存問題?

我使用的是事件處理程序調用一些JS當頁面完全加載,該事件處理程序是這樣的:

if (window.addEventListener) { 
    window.addEventListener("click", _onclick_handler, false); 
    document.addEventListener("DOMContentLoaded", _onload_handler, false); 
    window.addEventListener("resize", _onresize_handler, false); 
    window.addEventListener("keyup", _onkeyup_handler, false); 
} 
else if(document.attachEvent) { 
    document.attachEvent('onclick', _onclick_handler); 
    window.attachEvent('onload', _onload_handler); 
    window.attachEvent('onresize', _onresize_handler); 
    document.attachEvent('onkeyup', _onkeyup_handler); 
} 

function _onclick_handler() { 

} 

function _onload_handler() { 
    myFunc(); 
} 

function _onresize_handler() { 

} 

function _onkeyup_handler() { 

} 

在myFunc的() - 功能我得到一個div元素與特定的ID ,讓我們說「testdiv」,然後用下面的代碼隱藏它:.style.display =「none」; JS的整條生產線看起來是這樣的:

document.getElementById("testdiv").style.display = "none; 

這就像在IE6,IE8和所有其他常見的瀏覽器魅力,但在IE9股利心不是隱藏的,如果我查看該頁面的第一次。如果我修改了頁面,div就被隱藏了!那麼在這種情況下什麼是問題?!

THX幫助:)

回答

0

請問你的文檔在怪癖模式?我明白IE9支持 addEventListener,但不適用於怪癖模式。 MS doesn't mention this,但 read this article瞭解更多

爲您做了一個小測試here。它在我的IE9中工作。我將document.addEventListener更改爲window.addEventListener,調整了hider函數(因此如果單擊該元素將再次可見),將doctype更改爲<!DOCTYPE html>,並更改代碼順序(基於jslint抱怨),以便添加偵聽器是最後一個操作。

+0

如果是這種情況,attachEvent方法通常會起作用。 – duri 2011-05-20 08:47:11

+0

Thx爲答案,但沒有它不在怪癖模式,Doctype是:<!DOCTYPE html PUBLIC「 - // W3C // DTD XHTML 1.0 Strict // EN」「http://www.w3.org/TR/xhtml1 /DTD/xhtml1-strict.dtd「> – Patrick 2011-05-20 08:52:23

+0

編輯:啊對不起,我看到嚴格是怪癖模式:) – Patrick 2011-05-20 08:55:46

0

myFunc()和eventListeners定義了哪些順序和文件? DOMContentLoaded在任何外部資源加載之前觸發。 事件與myFunc()的定義之間可能存在爭用條件,具體取決於頁面是來自緩存(更快)還是來自服務器(更慢)。

此外,我已經分享了IE和JS緩存問題(請參閱我的問題5717206),腳本生成的動態內容只會在刷新頁面後呈現。

原來,IE認爲它已經緩存了整個頁面,但實際上卻錯過了一些我的腳本。所以從緩存渲染時,它無法加載文件並默默忽略它們。它幫助將一些隨機查詢參數附加到JS URL,以便IE可以認爲它們是動態的,並且不會嘗試緩存它們。

要測試您是否有這種情況,當DIV未隱藏時,只需打開IE開發工具並查看是否可以手動調用myFunc()

+0

Thx for Answer!首先,加載myFunc(),然後加載EventListener。如果我手動調用myFunc,該div消失...廢話IE9:D – Patrick 2011-05-20 09:28:43

+0

真的!這些外部文件本身?也許事件已經解決了? – Laas 2011-05-20 09:32:28

+0

不知道...功能都在同一臺服務器上.. – Patrick 2011-05-23 07:37:51