2011-05-20 74 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