2014-11-08 80 views
0

我在使用此代碼時遇到問題。我正在嘗試建立一個日曆。這個HTML文件只是一堆帶有日期,月份和年份選擇器的div。當我點擊年份或日期(或選擇決定添加onClick屬性的月份)時,會在Javascript中調用buildCalendar()函數。問題是我週日和週六有一些重複的值,所以日子不太合適。此外,請注意,有時會將價值觀放置在星期六專欄的右側(完全不包括在日曆中),我在最近幾天試圖弄清楚它並且讓我緊張起來的時候被困住了!在Javascript中顯示html和循環控制

另一個問題是,當我點擊生成日曆的日期時,日曆會生成但日期(和年份和月份)選擇器消失。我希望他們不要消失,以便我可以單擊不同的年份,月份或日期並使日曆動態更改。

這裏是CSS,HTML和Javascript代碼。我會做一個小提琴,但它不允許document.write()和我使用該方法來建立日曆。

<html> 
    <head> 
     <title>TODO supply a title</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <link rel = "stylesheet" type = "text/css" href = ".CSS/calendar.css"> 
     <script type = "text/javascript" src = "./Calendar/calendar.js"></script> 
     <script type = "text/javascript" src = "task.js"></script> 
    </head> 
    <body onload = "setDate();"> 
    <div id = "wrapper"> 
    <div id="topleft"> 
     <p><h2><script type="text/javascript"> var someMonth = document.getElementById("myMonth"); </script></h2> 

      <label for="myDay">Day: </label><input type="number" id="myDay" min="1" max="31" onclick="buildCalendar();"/> 
      <label for="myMonth">Month: </label><select id="myMonth" size="1" onClick = "buildCalendar";> 
      <option value="0">January</option> 
      <option value="1">February</option> 
      <option value="2">March</option> 
      <option value="3">April</option> 
      <option value="4">May</option> 
      <option value="5">June</option> 
      <option value="6">July</option> 
      <option value="7">August</option> 
      <option value="8">September</option> 
      <option value="9">October</option> 
      <option value="10">November</option> 
      <option value="11">December</option> 
      </select> 
      <label for="myYear">Year: </label><input type="number" id="myYear" min="1900" onClick = "buildCalendar();" /> 


    </div> 
    <div id = "topRight"> Shows the form to add task </div> 
    <div id = "bottomRight"> Show list of tasks </div> 
    <div id = "bottomLeft" > Shows calendar </div> 
    <div id = "left"> Left Div </div> 
    <div id = "right"> Right Div </div> 
    </div>   
    </body> 
</html> 

的CSS代碼僅僅是用於定位和主要着色,但我想我並不需要擔心的是,直到日曆成功地生成,我可以看到的日期選擇器。

body{ 
background-color:black; 
} 
#wrapper { 
size:950px; 
margin: 0 auto; 
background-color:green; 
border-color:black; 
} 
#left { 
size:50% 
float:left; 
background-color:yellow; 
} 
#right{ 
size:50%; 
float:right; 
background-color:red; 
} 
#bottomLeft{ 
background-color:red; 
} 
#topLeft{ 
float:left; 
position:absolute; 
z-index:100; 
} 

真正的問題可能在Javascript的某個地方。創建變量是爲了確定月份的第一個日期,最後日期,年份等。FOR語句遍歷從第一天開始到最後一天結束的月份,併爲每一天添加一個,結束在星期六的 這一行(至少這是它應該做的)。另外,我不明白爲什麼HTML中的日期選擇器沒有顯示出來。這是Javascript。

function setDate(){ 
    var today = new Date(); 
    var year = today.getFullYear(); 
    var month = today.getMonth(); 
    var day = today.getDate(); 
    document.getElementById("myDay").value = day; 
    document.getElementById("myMonth").value = month; 
    document.getElementById("myYear").value = year; 
} 
function buildCalendar(){ 
var firstDate = new Date(document.getElementById("myYear").value, document.getElementById("myMonth").value, 1); 
var weekDay = firstDate.getDay(); 
var theDate = firstDate.getDate(); 
var theMonth = firstDate.getMonth(); 
var theYear = firstDate.getFullYear(); 
var newDay = new Date(theYear, theMonth + 1, 1); 
var lastDate = new Date(newDay - 1); 
var lastDay = lastDate.getDate(); 
var aMonth = document.getElementById("myMonth").selectedIndex.text; 
document.write("<table class='caltable' border='1'><tr><th>"); 
document.write("<tr><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th>"); 
document.write("</th></tr>"); 
var col = 0; 
for (var i = 1-weekDay;i<=lastDay;i++) 
    { 
     if(col == 0 && weekDay != 6) 
     { 
     document.write("<td>" + i + "</td>"); 
     col++; 
     } 
     //prevents the day from sliding to the right if the first of the month is a Saturday 
     if(col == 0 && weekDay == 6) 
     { 
     document.write("<tr><td>" + i + "</td></tr>"); 
     col++; 
     } 
     if (col > 6) 
     { 
     document.write("<td>" + i + "</td></tr>"); 
     col = 0; 
     } 
     else 
     { 
     document.write("<td>" + i + "</td>"); 
     } 
       col++; 
    } 
    document.write("</table>"); 
    } 
/*function getMonthName() 
{ 
var e = document.getElementById("myMonth").selectedIndex.value; 
alert(e); 
}*/ 

回答

0

document.write不應在頁面加載後使用。如果您以後使用它,它將覆蓋文檔。相反,在beggining添加使用id =表的表標籤,並在JavaScript中使用此,

document.getElementById('table').innerHTML = html; 

此代碼將解決動態加載的問題。(不添加樣式)

<html> 
<head> 
    <title>TODO supply a title</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link rel = "stylesheet" type = "text/css" href = ".CSS/calendar.css"> 
    <script type = "text/javascript" src = "./Calendar/calendar.js"></script> 
    <script type = "text/javascript" src = "task.js"></script> 
    <script> 
    function setDate(){ 
     var today = new Date(); 
     var year = today.getFullYear(); 
     var month = today.getMonth(); 
     var day = today.getDate(); 
     document.getElementById("myDay").value = day; 
     document.getElementById("myMonth").value = month; 
     document.getElementById("myYear").value = year; 
    } 
    function buildCalendar(){ 
      var firstDate = new Date(document.getElementById("myYear").value, document.getElementById("myMonth").value, 1); 
      var weekDay = firstDate.getDay(); 
      var theDate = firstDate.getDate(); 
      var theMonth = firstDate.getMonth(); 
      var theYear = firstDate.getFullYear(); 
      var newDay = new Date(theYear, theMonth + 1, 1); 
      var lastDate = new Date(newDay - 1); 
      var lastDay = lastDate.getDate(); 
      vaMonth = document.getElementById("myMonth").selectedIndex.text; 
      var html = "<table class='caltable' border='1'><tr><th>"; 
      html += "<tr><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th>"; 
      html += "</th></tr>"; 
      var col = 0; 
      for (var i = 1-weekDay;i<=lastDay;i++) 
       { 
        if(col == 0 && weekDay != 6) 
        { 
        html += "<td>" + i + "</td>"; 
        col++; 
        } 
        //prevents the day from sliding to the right if the first of the month is a Saturday 
        if(col == 0 && weekDay == 6) 
        { 
        html += "<tr><td>" + i + "</td></tr>"; 
        col++; 
        } 
        if (col > 6) 
        { 
        html += "<td>" + i + "</td></tr>"; 
        col = 0; 
        } 
        else 
        { 
        html += "<td>" + i + "</td>"; 
        } 
        col++; 
       } 
       html += "</table>"; 

      document.getElementById('table').innerHTML = html; 
    } 
    /*function getMonthName() 
    { 
    var e = document.getElementById("myMonth").selectedIndex.value; 
    alert(e); 
    }*/ 
    </script> 
</head> 
<body onload = "setDate();"> 
<div id = "wrapper"> 
<div id="topleft"> 
    <p><h2><script type="text/javascript"> var someMonth = document.getElementById("myMonth"); </script></h2> 

     <label for="myDay">Day: </label><input type="number" id="myDay" min="1" max="31" onclick="buildCalendar();"/> 
     <label for="myMonth">Month: </label><select id="myMonth" size="1" onClick = "buildCalendar";> 
     <option value="0">January</option> 
     <option value="1">February</option> 
     <option value="2">March</option> 
     <option value="3">April</option> 
     <option value="4">May</option> 
     <option value="5">June</option> 
     <option value="6">July</option> 
     <option value="7">August</option> 
     <option value="8">September</option> 
     <option value="9">October</option> 
     <option value="10">November</option> 
     <option value="11">December</option> 
     </select> 
     <label for="myYear">Year: </label><input type="number" id="myYear" min="1900" onClick = "buildCalendar();" /> 


</div> 
<div id = "topRight"> Shows the form to add task </div> 
<div id = "bottomRight"> Show list of tasks </div> 
<div id = "bottomLeft" > Shows calendar </div> 
<div id = "left"> Left Div </div> 
<div id = "right"> Right Div </div> 
</div> 
<div id="table"></div>   
</body> 
</html>