2011-05-20 15 views
1

Javascriptを使用して要素を非表示にする際に問題があります。Javascript IE9のキャッシュ問題?

私は、ページが完全にロードされると、EventHandlerは次のようになり、いくつかのJSを呼び出すためのEventHandlerを使用しています:myFuncという中

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() { 

} 

() - 私は、特定のIDを持つDIV要素を取得する機能"testdiv"と言って、それを隠す:.style.display = "none"; JSの行全体は次のようになります。

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

これはIE6-IE8および他のすべての一般的なブラウザでは魔法のように動作しますが、IE9に隠されたdivのありえないが、私は、ページを最初に表示する場合。私がページを再編集すると、divは非表示になります!では、この場合の問題は何ですか? :)

答えて

0

を支援するための

Thxをあなたの文書がQuirksモードででしょうか?私はIE9が addEventListenerをサポートしていると理解しましたが、quirksモードではサポートされていません。 MS doesn't mention thisしかし、 read this article詳細をご確認ください

あなたのための小さなテストhereを調理しました。それは私のIE9で動作します。 document.addEventListenerwindow.addEventListenerに変更し、hider関数を調整しました(要素が再び見えるようにするため)doctypeを<!DOCTYPE html>に変更し、jslintの苦情に基づいてコードの順序を変更して、リスナーの追加が最後の動作になるようにしました。

+0

この場合、通常はattachEventメソッドが機能します。 – duri

+0

答えはThxですが、クォークモードではないDoctypeは次のようになります:<!DOCTYPE html PUBLIC " - // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-strict.dtd " – Patrick

+0

EDIT:ああ申し訳ありませんが、StrictがQuirks-Modeであることがわかりました:) – Patrick

0

myFunc()とeventListenersの順序とファイルはどのような順序で定義されていますか? DOMContentLoadedは、外部リソースがロードされる前に起動します。 イベントと、myFunc()の定義との間に競合状態が存在する可能性があります。これは、ページがキャッシュ(高速)またはサーバー(低速)からのものかどうかによって異なります。

また、スクリプトで生成された動的コンテンツは、ページの更新後にのみレンダリングされるIEとJSのキャッシュ問題(私の質問5717206参照)もありました。

IEは、ページ全体がキャッシュされていると思っていたことが分かりましたが、実際には何らかのスクリプトを見逃していました。そのため、キャッシュからレンダリングすると、ファイルをロードできず、無視されました。それは、JS URLにいくつかのランダムなクエリパラメータを追加するのを助け、IEがそれらを動的に考えるとそれらをキャッシュしようとはしないようにしました。

このシナリオがあるかどうかをテストするには、DIVが非表示になっていない場合は、単にIE Devツールを開き、手動でmyFunc()に電話できるかどうかを確認します。

+0

答えのためのThx!まず、myFunc()がロードされ、次にEventListenerがロードされます。私がmyFuncを手動で呼び出すと、divが消える...クラップIE9:D – Patrick

+0

本当にクラップ!これらの外部ファイル自体はありますか?イベントはすでに何とか解雇されているのでしょうか? – Laas

+0

わかりません...関数はすべて同じサーバー上にあります。 – Patrick