我使用javascript和html创建了我的日期下拉列表。上载我的php文件它显示今天的日期。但问题是,它显示了今天的两天。 例如:如果今天的日期是12-2-2015它在下拉列表中有DAY的选项为" 1,2,3 ...... 11,12,12,14 ...等等。这里没有显示第13天。
任何人都可以帮我纠正日期。 这是我的javascript:
var monthtext=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];
function populatedropdown(dayfield, monthfield, yearfield){
var today=new Date()
var dayfield=document.getElementById(dayfield)
var monthfield=document.getElementById(monthfield)
var yearfield=document.getElementById(yearfield)
var thisday=1;
for (var i=0; i<31; i++) {
dayfield.options[i]=new Option(thisday, thisday)
thisday+=1;
}
dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
for (var m=0; m<12; m++) monthfield.options[m]=new Option(monthtext[m], monthtext[m])
monthfield.options[today.getMonth()]=new Option(monthtext[today.getMonth()], monthtext[today.getMonth()], true, true) //select today's month
var thisyear=1999
for (var y=0; y<45; y++){
yearfield.options[y]=new Option(thisyear, thisyear)
thisyear+=1
}
yearfield.options[0]=new Option(today.getFullYear(), today.getFullYear(), true, true) //select today's year
}
这是我的HTML代码:
<tr><br><td>Date of Diagnosis</td><td>
<select id="daydropdown" name="daydropdown"></select>
<select id="monthdropdown" name="monthdropdown"></select>
<select id="yeardropdown" name="yeardropdown"></select>
<script type="text/javascript">
//populatedropdown(id_of_day_select, id_of_month_select, id_of_year_select)
window.onload=function() {
populatedropdown("daydropdown", "monthdropdown", "yeardropdown")
}
</script></td>
</tr>
答案 0 :(得分:1)
我认为您需要在代码中进行以下更改。
today.getDate()
为12,其中dayfield.options[12]
为第13个日期。所以它将第12次替换为第12次,并且重复第12次并删除13次。
替换
`dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day`
与
dayfield.options[today.getDate()-1]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
答案 1 :(得分:0)
您要添加新选项,而不是为当前日期选择现有选项。因此,例如在您的日期字段中,您将添加数字1到31,然后为当天添加新选项。
我会检查for循环中的当前日期并添加一个选定的属性
var today = new Date();
for (var i=0; i<31; i++) {
dayfield.options[i]=new Option(thisday, thisday)
if(today.getDate() == thisday) {
dayfield.selectedIndex = i;
}
thisday+=1;
}
这是一个有效的JSFiddle
答案 2 :(得分:0)
您的问题在于
行dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
这是为明天添加插入今天日期的第二个副本。如果你看一下循环插入日期:
var thisday=1;
for (var i=0; i<31; i++) {
dayfield.options[i]=new Option(thisday, thisday)
thisday+=1;
}
您将看到dayfield.options数组基于零,即第一个元素位于零位置,您还会看到thisday
从1开始,因此这将等同于
dayfield.options[0] = new Option(1,1);
dayfield.options[1] = new Option(2,2);
dayfield.options[2] = new Option(3,3);
dayfield.options[3] = new Option(4,4);
....
今天的假设是本月的第二天:
dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
// would have the effect of
dayfield.options[2] = new Option(2,2,true,true);
如果你看一下上面你可以看到选项[2]是执行这条线之前的第3个插槽。
要解决此问题,您应该使用:
// Note the -1
dayfield.options[today.getDate() -1] = new Option(today.getDate(), today.getDate(), true, true); //select today's day
或在for循环中设置选中:
for (var i=0; i<31; i++) {
var selected = thisday == today.getDate();
dayfield.options[i]=new Option(thisday, thisday, selected, selected);
thisday+=1;
}
答案 3 :(得分:0)
您可以简化此操作,只使用迭代器变量。
for (var i=1; i<32; i++) {
dayfield.options[i]=new Option(i, i);
}
更好的是,使用它来获取一个月内的天数:
var daysInMonth = new Date(year, month, 0).getDate();