2013-10-13 95 views
0

该代码旨在生成使用JavaScript和表格的日历。这几个月和几天都在荷兰,但应该可以理解。不知何故,这种情况在无尽的循环中结束,而当天数更大或者与我的数组长度相同时,它应该停止。为什么这会导致无限循环?

它应该为每个月制作12张表格,然后用这个月的日子填充这些表格。它还没有完成,因为它会假定每天都会在星期日开始。我想我也应该注意到我还没有那么有经验。

var months = new Array(); 
months[0] = "januari"; 
months[1] = "februari"; 
months[2] = "maart"; 
months[3] = "april"; 
months[4] = "mei"; 
months[5] = "juni"; 
months[6] = "juli"; 
months[7] = "augustus"; 
months[8] = "september"; 
months[9] = "oktober"; 
months[10] = "november"; 
months[11] = "december"; 

var maxDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
var weekDays = ["zo", "ma", "di", "wo", "do", "vr", "za"]; 
var kalender = 0; 
var days = 1; 
var weekDaysNumber = 0; 


while(kalender < months.length){ 
    document.write("<table><tr>"); 
    document.write("<th>" + months[kalender] + "</th></tr>"); 
    document.write("<tr>"); 
    while (weekDaysNumber < 7){ 
     document.write("<td>" + weekDays + "</td>"; 
     weekDaysNumber++; 
    } 
    document.write("</tr>"); 
    while(days < maxDays[kalender]){ 
     document.write("<td>" + days + "</td>"); 

     var rows = 0; 
     if(rows == 7 && days !== maxDays[kalender]){ 
     document.write("</tr>"); 
     document.write("<tr>"); 
     rows = 1; 
     } 

     rows++; 
     days++; 

    } 

    if(days == maxDays[kalender]){ 
      document.write("</tr></table>"); 
      kalender++; 
      weekDaysNumber=0; 

     } 

} 
+0

提示:http://stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice – elclanrs

回答

2

因为你从来没有days变量重置为1,等第二外环,它永远不会等于maxDays[kalendar]。有可能是其他问题,代码看起来比必要更复杂,但这是无限循环的明显原因:当days达到31,您打破第一个循环,开始第二个,并且因为31大于28内部循环从不输入,并且您的== maxDays[kalendar]从不输入。


您的浏览器有内置的全功能的调试器。您可以使用它来设置断点,单步执行代码,检查变量等。

0

您需要在while(kalender < months.length){循环内将days重置为1。

相关问题