我在网页中设置了年月日的select项,想用一个按钮实现增加一天的功能,但点击按钮后,天的select项就变成空白,不知为什么,但如果将Next()中的d2=d1+1改为d2=d1-1,再点击按钮后天就可以实现减少一天的变化,好奇怪!请高手给予一些指点,谢谢!程序代码如下:
<html> <head> 
<title>年月日三下拉框联动</title> 
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'> 
<meta name='author' content='F.R.Huang(meizz梅花雪)//www.meizz.com'> 
</head> 
<script language="JavaScript"><!-- function Next()
{
var y1 = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value;
var m1 = document.form1.MM.options[document.form1.MM.selectedIndex].value;
var d1 = document.form1.DD.options[document.form1.DD.selectedIndex].value;
var d2 = d1 + 1;
var m2 = m1;
var y2 = y1;      if (m2 ==2 && IsPinYear(y2))
{
  if(d2 == MonHead[m2-1]+1) 
  {
    m2=3;
    d2=1;
  }
} else
{
  if (d2 == MonHead[m2-1])
  {
    d2=1;
    m2=m2+1;
    if (m2 ==13)
    {
      y2=y2+1;
      m2=1;
    }
  }
}document.form1.YYYY.value = y2;
document.form1.MM.value = m2;
document.form1.DD.value = d2;
}//--></script> 
<body> 
<form name=form1> 
<select name=YYYY onchange="YYYYDD(this.value)"> 
<option value="">请选择 年</option> 
</select> 
<select name=MM onchange="MMDD(this.value)"> 
<option value="">选择 月</option> 
</select> 
<select name=DD> 
<option value="">选择 日</option> 
</select> 
<input type="button" value="next" onclick="Next()">
</form> <script language="JavaScript"><!-- 
function YYYYMMDDstart() 

MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //先给年下拉框赋内容 
var y = new Date().getFullYear(); 
for (var i = (y-30); i < (y+30); i++) //以今年为准,前30年,后30年 
document.form1.YYYY.options.add(new Option(i, i)); //赋月份的下拉框 
for (var i = 1; i < 13; i++) 
document.form1.MM.options.add(new Option(i, i)); document.form1.YYYY.value = y; 
document.form1.MM.value = new Date().getMonth() + 1; 
var n = MonHead[new Date().getMonth()]; 
if (new Date().getMonth() ==1 && IsPinYear(YYYYvalue)) n++; 
writeDay(n); //赋日期下拉框Author:meizz 
document.form1.DD.value = new Date().getDate(); 

if(document.attachEvent) 
window.attachEvent("onload", YYYYMMDDstart); 
else 
window.addEventListener('load', YYYYMMDDstart, false); 
function YYYYDD(str) //年发生变化时日期发生变化(主要是判断闰平年) 

var MMvalue = document.form1.MM.options[document.form1.MM.selectedIndex].value; 
if (MMvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} 
var n = MonHead[MMvalue - 1]; 
if (MMvalue ==2 && IsPinYear(str)) n++; 
writeDay(n) 

function MMDD(str) //月发生变化时日期联动 

var YYYYvalue = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value; 
if (YYYYvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} 
var n = MonHead[str - 1]; 
if (str ==2 && IsPinYear(YYYYvalue)) n++; 
writeDay(n) 

function writeDay(n) //据条件写日期的下拉框 

var e = document.form1.DD; optionsClear(e); 
for (var i=1; i<(n+1); i++) 
e.options.add(new Option(i, i)); 

function IsPinYear(year)//判断是否闰平年 
{ return(0 == year%4 && (year%100 !=0 || year%400 == 0));} 
function optionsClear(e) 

e.options.length = 1; 

//--></script> 
</body> 
</html>

解决方案 »

  1.   

    第15行改成
    var d2=d1*1+1*1;
    本地测试可以,主要是 加号(+)可能成为了连接符,
    也许有更好的办法,网上搜下!
      

  2.   

    var d2=Number(d1)+1; 也可以
      

  3.   

    木什么说的
    文本域的value都是string类型的,需要转换后运算
    var d1 = document.form1.DD.options[document.form1.DD.selectedIndex].value;
    alert(typeof d1);//string
    alert(typeof ~~d1);//number
    alert(~~d1);//number 4;效果等于Number(d1)
    var d2 = ~~d1 + 1;//5
    alert(d2);//5