3

多数のdivを非表示および表示する大きなjavascript関数init()があります。ページが読み込まれると、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をトリガーし、ページの最後にこのスクリプトを配置するさまざまな方法を試しました。

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

init()をトリガーするこれらのさまざまなメソッドはすべて、違いがないように見えました。

これは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";}

}

これは、init()関数から呼び出されているhighlightlistinitiate関数です。

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";
    }

これは、highlightboxinitiate関数から呼び出されているgetvariables関数です。

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; }

ページが適切に開始されなかった場合、init()関数の最初のステートメントが実行されなかったため、関数は問題ないという印象を受けました。

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

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

私はたくさんの検索とデバッグを行ってきたので、どんな助けでも大歓迎です!

4

3 に答える 3

4

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

ページの最後にある次のステートメントは、この問題の解決に役立ちました。

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

上記は、そのステートメントまでに解析されたすべてをブラウザーに送信します。

于 2012-04-19T17:32:50.620 に答える
4

あなたが試すことができます

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

それ以外の

<script type="text/javascript">
   $(document).ready(function() {
      init();
   });
</script>
于 2012-04-08T12:33:07.320 に答える
1

$(window).load の代わりに $(document).ready を使用する必要があります。

これは、(外部) 画像/javascript/css/フレームなどを含むページ全体が完全に読み込まれたときにのみ $(window).load がトリガーされるためです。$(document).ready は、DOM が完全に読み込まれたときにトリガーされます。これは、画像のロードなどを待たずに、すでに DOM 操作を実行できることを意味します。

于 2012-04-08T12:40:02.170 に答える