问题1:如题,有一个下拉列表,我想在列表值中显示年份(2004-->今年的年份+10)如:2004,值(value)是:年份+年,如:2004年。现在能显示值了,就是不能显示文本,
问题2:我在使用for循环添加时,用:
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
{
year.options[i].selected = true; //报错,错误信息:'.options[...]'为空或不是对象。
......
这是为什么?<html>
<head>
<script type="text/javascript">
var today = new Date();
function init_Year()
{
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
{
var varItem = document.createElement("option")
varItem.setAttribute("text",i);
varItem.setAttribute("value",i+"年");
year.options.appendChild(varItem);
}
//year.options[today.getFullYear()].selected = true; //报错,错误信息:'.options[...]'为空或不是对象。
}
</script>
</head>
<body onload="init_Year()">
<form id="myform">
<select id="Regedit_Year" name="Year" onChange="eval(alert(this.value))"></select>年
<select id="Regedit_Month" name="Month"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form>
</body>
</html>
需要转换数据类型吗?我将年份转换成int类型的还不对。
问题2:我在使用for循环添加时,用:
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
{
year.options[i].selected = true; //报错,错误信息:'.options[...]'为空或不是对象。
......
这是为什么?<html>
<head>
<script type="text/javascript">
var today = new Date();
function init_Year()
{
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
{
var varItem = document.createElement("option")
varItem.setAttribute("text",i);
varItem.setAttribute("value",i+"年");
year.options.appendChild(varItem);
}
//year.options[today.getFullYear()].selected = true; //报错,错误信息:'.options[...]'为空或不是对象。
}
</script>
</head>
<body onload="init_Year()">
<form id="myform">
<select id="Regedit_Year" name="Year" onChange="eval(alert(this.value))"></select>年
<select id="Regedit_Month" name="Month"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form>
</body>
</html>
需要转换数据类型吗?我将年份转换成int类型的还不对。
for (var i=2004;i<(today.getFullYear()+10);i++)
{
var varItem = document.createElement("option")
varItem.appendChild(document.createTextNode(i))
varItem.setAttribute("value",i+"年");
year.options.appendChild(varItem);
}问题2:
var year = document.getElementById("Regedit_Year");
for (var i=2004;i <(today.getFullYear()+10);i++)
{
year.options[i].selected = true; //报错,错误信息:'.options[...]'为空或不是对象。
...... 请问问题2该怎么解决,options[]中间的参数有没有要求?
一般为一个select添加下拉框,直接var opt = new Option(text,value);
year.options[i] = opt;
就可以了
<html>
<head>
<script type="text/javascript">
var today = new Date();
function init_Year(){
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
year.options.add(new Option(i+"年",i));
year.value=today.getFullYear()
}
</script>
</head>
<body onload="init_Year()">
<form id="myform">
<select id="Regedit_Year" name="Year" onChange="eval(alert(this.value))"></select>年
<select id="Regedit_Month" name="Month"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form>
</body>
</html>
var today = new Date();
function init_Year()
{
var year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
{
year.options.add(new Option(i,i+"年"));
}
//year.options[today.getFullYear()].selected = true;
}
现在还有最后一个问题,我想让页面打开,这个年月日的地方就显示当前的年月日,要是下面这三个能用就最好不过了,不知道怎样才能让他们生效。
var today = new Date();
year.options[today.getFullYear()].selected = true;
month.options[today.getMonth()+1].selected = true;
day.options[today.getDate()].selected = true;
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>动态创建日期下拉框</title>
<script type="text/javascript">
var today = new Date();
function init_Year(){
var Year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
Year.options.add(new Option(i+"年",i));
Year.value=today.getFullYear()
}function init_Month(){
var Month= document.getElementById("Regedit_Month");
for (var i=1;i<13;i++)
Month.options.add(new Option(i+"月",i));
Month.value=today.getMonth()+1
}function init_Day(){
var Day= document.getElementById("Regedit_Day");
var caiying2009=new Date(today.getFullYear(),today.getMonth()+1,0).getDate()
for (var i=1;i<=caiying2009;i++)
Day.options.add(new Option(i+"日",i));
Day.value=today.getDate()
}onload=function(){
init_Year();
init_Month();
init_Day()
}
</script></head><body>
<form id="myform">
<select id="Regedit_Year" name="Year" onChange="eval(alert(this.value))"></select>年
<select id="Regedit_Month" name="Month"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form></body></html>
function init_Year(){
var Year = document.getElementById("Regedit_Year");
for (var i=2004;i<(today.getFullYear()+10);i++)
Year.options.add(new Option(i,i+"年"));
Year.value=today.getFullYear()
}
<head>
<title>动态创建日期下拉框</title>
<script type="text/javascript">
var today = new Date();
function initer()
{
var Year = document.getElementById("thisyear");
var Month = document.getElementById("thismonth");
var Day = document.getElementById("thisday");
Year.text = today.getFullYear();
Year.value = today.getFullYear()+"年";
Month.text = today.getMonth()+1;
Month.value = today.getMonth()+1+"月";
Day.text = today.getDate();
Day.value = today.getDate()+"日";
}
function init_Year()
{
var year = document.getElementById("Regedit_Year");
year.options.length = 0;
for (var i=2004;i<(today.getFullYear()+10);i++)
{
year.options.add(new Option(i,i+"年"));
}
}function init_Month()
{
var month = document.getElementById("Regedit_Month");
month.options.length = 0;
for (var i=1;i<=12;i++)
{
month.options.add(new Option(i,i+"月"));
}
}function init_Day()
{
var day = document.getElementById("Regedit_Day");
day.options.length = 0;
for (var i=1;i<=31;i++)
{
day.options.add(new Option(i,i+"日"));
}
}
</script>
</head>
<body onload="initer()">
<form id="myform">
<select id="Regedit_Year" name="Year" onFocus="init_Year()"><option id = "thisyear" selected="selected"></option></select>年
<select id="Regedit_Month" name="Month" onFocus="init_Month()"><option id = "thismonth" selected="selected"></option></select>月
<select id="Regedit_Day" name="Day" onFocus="init_Day()"><option id = "thisday" selected="selected"></option></select>日
</form>
</body>
</html>
function init_Year(){
var Year = document.getElementById("Regedit_Year");
for (var i=2004;i <(today.getFullYear()+10);i++)
Year.options.add(new Option(i,i+"年"));
Year.value=today.getFullYear()+"年"
}
var caiying2009=new Date(today.getFullYear(),today.getMonth()+1,0).getDate()
会自动计算出当前月份的天数
你调整系统日期到:2009/2(28天)和2008/2(29天)试试就知道了
<html>
<head>
<title>动态创建日期下拉框</title>
<script type="text/javascript">
/* 定义几个全局变量today、year、month、day */
var today = new Date();
//var year = document.getElementById("Regedit_Year");
//var month = document.getElementById("Regedit_Month");
//var day = document.getElementById("Regedit_Day");
function init_Year()
{
var year = document.getElementById("Regedit_Year");
for (var i=2004;i <(today.getFullYear()+10);i++)
year.options.add(new Option(i,i+"年"));
year.value = today.getFullYear()+"年"
} function init_Month()
{
var month = document.getElementById("Regedit_Month");
for (var i=1;i<=12;i++)
month.options.add(new Option(i,i+"月"));
month.value = today.getMonth()+1+"月";
}function init_Day()
{
var year = document.getElementById("Regedit_Year");
var month = document.getElementById("Regedit_Month");
var day = document.getElementById("Regedit_Day");
/* 计算你选择的这一年的这一月有多少天 */
var theDays_of_thisMonth = new Date(parseInt(year.value),parseInt(month.value),0).getDate();
//alert(theDays_of_thisMonths);
for (var i=1;i<=theDays_of_thisMonth;i++)
day.options.add(new Option(i,i+"日"));
day.value = today.getDate()+"日";
}
onload = function()
{
init_Year();
init_Month();
init_Day()
}
</script>
</head>
<body>
<form id="myform">
<select id="Regedit_Year" name="Year"></select>年
<select id="Regedit_Month" name="Month" onChange="init_Day()"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form>
</body>
</html>
//这是我根据楼上这位大哥说的改的,功能都实现了,就是其中定义的有重复的局部变量,我想给他们3个定义成全局变量,写在最上边没有生效,变量today就生效了,请问这是为什么那?
<html>
<head>
<title>动态创建日期下拉框</title>
<script type="text/javascript">
/* 定义几个全局变量today、year、month、day */
var today = new Date();
function init_Year()
{
for (var i=2004;i <(today.getFullYear()+10);i++)
year.options.add(new Option(i,i+"年"));
year.value = today.getFullYear()+"年"
} function init_Month()
{
for (var i=1;i<=12;i++)
month.options.add(new Option(i,i+"月"));
month.value = today.getMonth()+1+"月";
}function init_Day()
{
/* 计算你选择的这一年的这一月有多少天 */
var theDays_of_thisMonth = new Date(parseInt(year.value),parseInt(month.value),0).getDate();
//alert(theDays_of_thisMonths);
for (var i=1;i<=theDays_of_thisMonth;i++)
day.options.add(new Option(i,i+"日"));
day.value = today.getDate()+"日";
}var year,month,day;
onload = function()
{
year = document.getElementById("Regedit_Year");
month = document.getElementById("Regedit_Month");
day = document.getElementById("Regedit_Day");
init_Year();
init_Month();
init_Day()
}
</script>
</head>
<body>
<form id="myform">
<select id="Regedit_Year" name="Year"></select>年
<select id="Regedit_Month" name="Month" onChange="init_Day()"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form>
</body>
</html>
你留意下他算法里有个重大的BUG.
每次init_Day都不清就加的...
<head>
<title>动态创建日期下拉框</title>
<script type="text/javascript" defer="defer">
/* 定义几个全局变量today、year、month、day, 先加上defer="defer",如果使用这里定义的全局变量,在IE下可以,在FF下就不行了*/
//var today = new Date();
//var year = document.getElementById("Regedit_Year");
//var month = document.getElementById("Regedit_Month");
//var day = document.getElementById("Regedit_Day");
function init_Year()
{
for (var i=2004;i <(today.getFullYear()+10);i++)
year.options.add(new Option(i,i+"年"));
year.value = today.getFullYear()+"年"
} function init_Month()
{
for (var i=1;i<=12;i++)
month.options.add(new Option(i,i+"月"));
month.value = today.getMonth()+1+"月";
}function init_Day()
{
/* 清除之前日(期)下拉列表的值 */
day.options.length = 0;
/* 计算你选择的这一年对应的这一月有多少天 */
var theDays_of_thisMonth = new Date(parseInt(year.value),parseInt(month.value),0).getDate();
//alert(theDays_of_thisMonths);
for (var i=1;i<=theDays_of_thisMonth;i++)
day.options.add(new Option(i,i+"日"));
day.value = today.getDate()+"日";
}
var today,year,month,day;
onload = function()
{
today = new Date();
/* 使用这里定义的全局变量,不用在上面加defer="defer"了。不过这里还有一个疑问,下面定义的这3个全局变量不能直接加var,上面那个today 就可以*/
year = document.getElementById("Regedit_Year");
month = document.getElementById("Regedit_Month");
day = document.getElementById("Regedit_Day");
init_Year();
init_Month();
init_Day()
}
</script>
</head>
<body>
<form id="myform">
<!-- 防止有些人先选择月,后选择年 -->
<select id="Regedit_Year" name="Year" onChange="init_Day()"></select>年
<select id="Regedit_Month" name="Month" onChange="init_Day()"></select>月
<select id="Regedit_Day" name="Day" onChange="eval(alert(this.value))"></select>日
</form>
</body>
</html>
帖子到这里,问题基本上已经解决了,鱼已经拿到了,不过还是想学点"渔"技。
还是那两个地方定义的全局变量,详情看我上面代码中的注释部分。
谢谢诸位了,我再给帖子加点分,大家接着讨论,分数太少了!
所以你在onload var的话.就只能在onload函数域中用了.
而today则是在文档域中定义的.所以可以说是文档中的全局变量.
所以today那里可以.后面的不可以.
init_Year()、 init_Month()、 init_Day()中调用公共(全局)变量时,还是“未定义”的
同样
如果:
onload = function()
{
var today = new Date();.....
也回报错的
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>动态创建日期下拉框_终结版</title>
<script type="text/javascript">
function init_Year(){
for (var i=2004;i<(today.getFullYear()+10);i++)
Year.options.add(new Option(i,i));
Year.value=today.getFullYear()
}function init_Month(){
for (var i=1;i<13;i++)
Month.options.add(new Option(i,i));
Month.value=today.getMonth()+1
}function init_Day(){
Day.options.length = 0;//清除之前日(期)下拉列表的值
var caiying2009= new Date(parseInt(Year.value),parseInt(Month.value),0).getDate();// 计算该年该月有多少天
for (var i=1;i<=caiying2009;i++)
Day.options.add(new Option(i,i));
Day.value=today.getDate()
}var today = new Date(),Year,Month,Day;
onload=function(){
//全局变量赋值
Year = document.getElementById("Regedit_Year");
Month= document.getElementById("Regedit_Month");
Day= document.getElementById("Regedit_Day");//初始化三个下拉框(选项)
init_Year();
init_Month();
init_Day()//初始化三个下拉框(事件)
Year.onchange=init_Day
Month.onchange=init_Day
Day.onchange=function(){alert(this.value)}
}
</script></head><body>
<form id="myform">
<select id="Regedit_Year" name="Year"></select>年
<select id="Regedit_Month" name="Month"></select>月
<select id="Regedit_Day" name="Day"></select>日
</form></body>
</html>