2011-05-05 184 views
0

我有3個HTML <select>年,月和日。年份和月份自動設置爲當前年份和當前月份。我純粹用PHP做到了這一點。但是,這是由觸發的Javascript的日子似乎並不儘管我已經做了html-select <option selected =「」>不起作用

if (j == <?php echo date('d') ?>) days_select.options[days_select.options.length] = new Option(j, j, true); 

默認天仍是1不是當前的一天的工作。甚至令人沮喪的是,當我在螢火蟲上檢查它時,選定的一天是當天......我是編程中的一個完全noob,這就是爲什麼這些簡單的東西對我來說很難掌握。請幫助...

date_select.php

<body onload="loadDays();"> 
<script type="text/javascript" > 

    function loadDays() { 
    var year = parseInt(document.getElementById('years').value); 
    var month = document.getElementById('months').value; 
    var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 
    var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 

    if ((year % 4) == 0) days[1] = 29; 

    var days_select = document.getElementById('days'); 
    days_select.options.length = 0; 

    for(i in months) { 
    if (month == months[i]) { 

    for(var j = 1; j <= days[i]; j++) { 
     if (j == <?php echo date('d') ?>) days_select.options[days_select.options.length] = new Option(j, j, true); 
     else days_select.options[days_select.options.length] = new Option(j, j); 
    } 
    break; 
    } 
    } 
    } 

</script> 

<span style="display: table; "> 
    <span style="display: table-cell; "> 
    <select id="years" onchange="loadDays();"> 
    <?php 
    for($year = 1900; $year <= 2100; $year++) { 
     if ($year == date('Y')) echo "<option value='$year' selected=''>" . $year . "</option>"; 
     else echo "<option value='$year'>" . $year . "</option>"; 
    } 
    ?> 
    </select> 
    </span> 
    &nbsp; 
    <span style="display: table-cell; "> 
    <select id="months" onchange="loadDays();"> 
    <?php 
    $months = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

    foreach($months as $month){ 
     if ($month == date('M')) echo "<option value='$month' selected=''> " . $month . "</option>"; 
     else echo "<option value='$month'> " . $month . "</option>"; 
    } 
    ?> 
    </select> 
    </span> 
    &nbsp; 
    <span style="display: table-cell; "> 
    <select id="days" > 

    </select> 
    </span> 
</span> 
</body> 

回答

1

我把它作爲一個單獨的答案,因爲它是一個。

Option()的第三個參數是該選項是否默認選中,就像它是在HTML中指定的一樣。第四個是現在是否真的被選中。將另一個true添加到您的Option()調用中,它適用於我的測試。

new Option(j, j, true, true) 
+0

這回答了......感謝您向我解釋...... – 2011-05-05 02:57:47

1

我想可能是因爲<?php echo date('d') ?>產生串"04"帶有前導零的。您的j循環計數器是一個整數,並且永遠不會匹配PHP輸出的字符串。

嘗試使用Javascript的parseInt()函數進行包裝,或使用date('j')表示前導零。

if (j == parseInt(<?php echo date('d') ?>)) 

更好的是,只需使用Javascript自己的Date對象來獲取當天。

var theDateObj = new Date(); 
var today = theDateObj.getDate(); // Will output int 4 for today. 
+0

但在螢火蟲中顯示? ANYWAY我會嘗試...謝謝 – 2011-05-05 02:42:10

+1

我現在看到它 - 你需要另一個參數到你的'新的Option()'。您已將'defaultSelected'參數設置爲true,但您還需要使用以下參數'true'來說明它現在是否真的被選中。 '新的選項(j,j,true,true);'經過測試併爲這項修改工作。 – 2011-05-05 02:53:56

+0

它的工作......新選項(j,j,真,真)做到了......非常感謝! – 2011-05-05 02:55:45