2012-04-08 14 views
2

大量のdivを隠して表示する大きなjavascript関数init()があります。ページが読み込まれると、javascript関数が以下のスクリプトによってトリガされます。なぜ私のJavaScript関数が動作しない場合があります

<script type="text/javascript"> 
$(document).ready(function() { 
init(); 
}); 
</script> 

ほとんどの場合、JavaScriptは以下のスクリプトによってトリガーされます。しかし、しばらくの間、スクリプトinit()は起動されていないようです。関数init()の約20倍の約1回がトリガされていないようです。他のすべての19回ページとjavascriptは間違いなく正常に動作しています。このエラーが発生する状況は、F5を20回押したときにこのエラーが発生するため、通常と変わらないようです。

init()の最初のステートメント(alert( "function called");)が呼び出されなかったため、init()が全く呼び出されていないように見えました。 JavaScriptが正常に動作していた場合は、警告メッセージが表示され、ページはエラーなく正常にロードされました。

私は、window.onloadなどのjavascriptとページの最後に、このスクリプトを置くことをトリガーするさまざまな方法を試してみました:init()メソッドをトリガーするためにすべてのこれらの異なる方法

<script type="text/javascript">init();</script> 

作るように見えませんでした任意の違い。

これはINIT()関数である:

function init(){ 
pauzereload__gl_var=1; 
load2__gl_var=0; 

//Hide bus options: 
var boxbusnotshow = document.getElementById("boxDiv").getElementsByTagName("a"); 
boxbusnotshow[3].style.display="none"; 
boxbusnotshow[4].style.display="none"; 
boxbusnotshow[5].style.display="none"; 

document.getElementById("loadingdiv").style.display = "none"; 
document.getElementById("loadingdivdate").style.display = "none"; 
getvariables(); //Get variables generated by the php script, to get activetab 

var a=1; b=1; 
highlightboxinitiate(a,activetab__gl_var,load2__gl_var); 
highlightlistinitiate(a,b); 

pauzereload__gl_var=0; 
} 

これは、init()関数から呼び出されるhighlightboxinitiate関数である:

function highlightboxinitiate(divnr,linenr,load2__gl_var) { 

getvariables(); 

for (i = 1; i < 8; i++) {document.getElementById("nextnr" + i).style.display = "none";} 
if(counttab__gl_var[linenr]>(9 + settab__gl_var[linenr]) && load2__gl_var==0){ 
document.getElementById("nextnr" + linenr).style.display = "block";} 

for (i = 1; i < 8; i++) {document.getElementById("prevnr" + i).style.display = "none";} 
if(settab__gl_var[linenr] >2 && load2__gl_var==0){ 
document.getElementById("prevnr" + linenr).style.display = "block";} 

for (i = 1; i < 8; i++) {document.getElementById("pagenr" + i).style.display = "none";} 
if(load2__gl_var==0 && counttab__gl_var[linenr]>9){ 
document.getElementById("pagenr" + linenr).style.display = "block";} 


if(load2__gl_var==1){ 
for (i = 1; i < 8; i++) {document.getElementById("renextnr" + i).style.display = "none";} 
if(counttab__gl_var[linenr]>(9 + settab__gl_var[linenr])){ 
document.getElementById("renextnr" + linenr).style.display = "block";} 

for (i = 1; i < 8; i++) {document.getElementById("reprevnr" + i).style.display = "none";} 
if(settab__gl_var[linenr] > 2){ 
document.getElementById("reprevnr" + linenr).style.display = "block";} 

for (i = 1; i < 8; i++) {document.getElementById("repagenr" + i).style.display = "none";} 
if(counttab__gl_var[linenr]>9){ 
document.getElementById("repagenr" + linenr).style.display = "block";} 
} 

var box = document.getElementById("boxDiv").getElementsByTagName("a"); 
current_tab__gl_var=linenr; 
    for (i = 0; i < box.length; i++) {unselectboxinitiate(divnr,i);} 

tabselnr = linenr-1; 
if (tabselnr<=2){box[tabselnr].className="selected1";} 
if (tabselnr>2 && tabselnr<=5){box[tabselnr].className="selected2";} 
if (tabselnr==6){box[tabselnr].className="selected3";} 


    for (j = 1; j < 10; j++) { 
    for (i = 1; i < 8; i++) { 
    document.getElementById("list"+j+"n"+i).style.display = "none"; 
    document.getElementById("it"+j+"n"+i).style.display = "none";} 
    document.getElementById("list"+j+"n"+linenr).style.display = "block"; 
    document.getElementById("it"+1+"n"+linenr).style.display = "block";} 

} 

これは中であるhighlightlistinitiate関数でありますinit()関数から呼び出されます:

function highlightlistinitiate(divnr,linenr) { 
    var box = document.getElementById("listmenu").getElementsByTagName("a"); 
current_list__gl_var=linenr; 
    for (i = 0; i < box.length; i++) { 
    box[i].className="unselected";} 
    box[linenr-1].className="selected"; 
     for (j = 1; j < 10; j++) { 
    for (i = 1; i < 8; i++) { 
    document.getElementById("it"+j+"n"+i).style.display = "none";}} 
    document.getElementById("it"+current_list__gl_var+"n"+current_tab__gl_var).style.display = "block"; 
    } 

getvariables fu highlightboxinitiate関数から呼び出されているnction:

function getvariables(){ 
counttab__gl_var = new Array (7); 
settab__gl_var = new Array (7); 
counttab__gl_var [1] = 83; settab__gl_var [1] = 0; activetab__gl_var = 2; counttab__gl_var [2] = 111; settab__gl_var [2] = 0; activetab__gl_var = 2; counttab__gl_var [3] = 137; settab__gl_var [3] = 0; activetab__gl_var = 2; counttab__gl_var [4] = 1; settab__gl_var [4] = 0; activetab__gl_var = 2; counttab__gl_var [5] = 1; settab__gl_var [5] = 0; activetab__gl_var = 2; counttab__gl_var [6] = 1; settab__gl_var [6] = 0; activetab__gl_var = 2; counttab__gl_var [7] = 1; settab__gl_var [7] = 0; activetab__gl_var = 2; } 

は、私がページを正しく初期化()関数の最初の文が開始されなかったときに実行されなかったための機能がOKであることを印象を持っています。

クロスブラウザーがこの問題に影響していないことを確認しました。この問題はすべてのブラウザで発生します。

エラーが発生すると、Firebugコンソールにエラーメッセージが表示されません。

私は多くの検索とデバッグを行っていますので、どんな援助も大歓迎です。

+3

Yikes。私はそれを維持していないとうれしいです。 –

+0

明確にする(私はあなたがこれをチェックしたが、あなたの質問には表示されないと確信している):init関数が実行されていないとき、ブラウザのコンソールに何かエラーがあるのでしょうか? – Marcin

+0

いいえ私はどんなエラーも見当たりません – BastiaanWW

答えて

3

問題は何とかすべてのコンテンツがページに読み込まれていないため、すべてのオブジェクトを見つけることができなかったためにJavaScriptがクラッシュしたという問題でした。

ページの末尾に次の文では、この問題を解決する助け:

<?php 
print str_pad('',4096)."\n"; 
ob_flush(); 
flush(); 
set_time_limit(45); 
?> 

上記ブラウザにその文まで解析されたすべてのものを送信します。

+0

これは、私にとって似たような問題を解決するものに終わったことを、非現実的です。私は 'ob_flush();を削除しなければならなかった。 – easiestripes

2

あなたは

<script type="text/javascript"> 
    $(window).load(function() { 
     init(); 
    }); 
</script> 

代わりの

<script type="text/javascript"> 
    $(document).ready(function() { 
     init(); 
    }); 
</script> 
+0

私を狂気と呼んでいますが、これは無作為にあなたのサーバー側のコードにいくつかのguffを加えるより良い解決策だと思います。 –

0

あなたが代わりに$(ウィンドウ).LOADの.ready $(文書)を使用してくださいを試すことができます。

これは、(外部)画像/ javascript/CSS /フレームなど、ページ全体が完全に読み込まれたときだけ$(window).loadがトリガーするからです。DOMが完全に読み込まれたときに$(document).readyトリガー。つまり、イメージの読み込みなどを待つことなく、DOM操作を行うことができます。

関連する問題