我有一个大的javascript函数init(),它隐藏并显示了大量的div。加载页面时,javascript函数由下面的脚本触发。
<script type="text/javascript">
$(document).ready(function() {
init();
});
</script>
大多数情况下,javascript是由下面的脚本触发的。然而,偶尔脚本init()似乎不会被触发。似乎没有触发函数init()大约20次中的1次。所有其他19次页面和javascript工作正常没有任何错误。发生此错误的情况似乎与正常情况没有什么不同,因为当按F5 20次时会发生此错误。
我检查过init()似乎根本没有被调用,因为init()中的第一个语句(alert(“function called”);)没有被调用。在javascript工作正常的情况下,我收到了警告消息,页面被正确加载而没有任何错误。
我尝试了不同的方法来触发javascript,例如window.onload,并将此脚本放在页面的末尾:
<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()函数中的第一个语句没有被执行。
我检查过crossbrowser没有影响这个问题。所有浏览器都会出现此问题。
发生错误时,我在firebug控制台中看不到任何错误消息。
我一直在寻找和调试很多,所以任何帮助都会非常受欢迎和赞赏!
答案 0 :(得分:3)
问题是不知道所有的内容都没有被加载到页面中,所以javascript崩溃了,因为它无法找到所有对象。
页面末尾的以下声明有助于解决此问题:
<?php
print str_pad('',4096)."\n";
ob_flush();
flush();
set_time_limit(45);
?>
上面将解析的所有内容发送到浏览器。
答案 1 :(得分:2)
你可以尝试
<script type="text/javascript">
$(window).load(function() {
init();
});
</script>
而不是
<script type="text/javascript">
$(document).ready(function() {
init();
});
</script>
答案 2 :(得分:0)
你应该使用$(document).ready而不是$(window).load。
这是因为$(window).load仅在整个页面完全加载时触发,包括(外部)images / javascript / css / frames等。$(文档).ready在DOM完全加载时触发。这意味着您已经可以执行DOM操作,而无需等待正在加载的图像等。