关于改变事件问题
7-7视频中, 之所写选择月,日会进行改变,是因为<select name="yyyy" id="mmmm" onchange="selectYmd()"></select>月 ,这一步吧,只有通过了改变事件,然后在js中写好事件的内容,才能生效。对吧?事件中的这段代码, var m=parseInt(mm.value) 获取改变月份,通过if判断,决定改变的月条目之后,对应改变日条目,我理解的对吗,也就是2级联动,通过月改变,故而改变日条目;
问题2:
var m=parseInt(mm.value); 月份本来就是数值啊,为什么还要转换呢?
问题3:
y=parseInt(yyyy.value); 为什么直接的定义y,不需要加var?
问题4:
为什么这样写不可以啊,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="path/index.js"></script>
</head>
<body onload="ymd()">
<form>
<select name="yyyy" id="yyyy" onchange="selectYmd()"></select>年
<select name="yyyy" id="mmmm" onchange="selectYmd()"></select>月
<select name="yyyy" id="dddd"></select>日
</form>
</body>
</html>
js:function ymd(){
//获取id=yyyy的控件;分别年,月,日;
var yyyy=document.getElementById("yyyy");
var mmmm=document.getElementById("mmmm")
var dddd=document.getElementById("dddd");
//设置最后1年为当前年限
var date=new Date();
var year=parseInt(date.getFullYear());
//对年进行赋值
initSelect(yyyy,1999,year);
//对月进行赋值
initSelect(mmmm,1,12);
//对日进行赋值
initSelect(dddd,1,28);
//获取列表的框的长度;
var n=yyyy.length;
//列表框选中某一个项目;
yyyy.selectedIndex=Math.round(n/2);
//天列表框的长度为0,也就是删除天列表框的条目信息;
// dddd.options.length=0;
}
//给列表框赋值,传递三个参数:表单元素、开始值、结束值
function initSelect(obj,start,end) {
for(var i=start;i<=end;i++){
//在对象中添加内容;第一个代表本文显示的内容、第二个为value;
//给obj控件(也就是表单元素)添加条目也就是option,new Option中添加的内容,第一个属性内容,第二个value的值;
obj.options.add(new Option(i,i));
}
}
//添加改变事件
function selectYmd(){
//获取月,天的元素;
var mm=document.getElementById("mmmm");
var dd=document.getElementById("dddd");
//获取月的值对月的值进行转换为数值;
var m=parseInt(mm.value);
//创建一个最后一天的变量
var dayEnd;
//进行条件判断
if(m==4||m==6||m==9||m==11){
dayEnd=30;
}else if(m==2){
//设置闰年,首先获取年份信息
var yyyy=document.byElementById("yyyy");
//获取当前年份的值
var y=parseInt(yyyy.value);
if((y%4==0 && y%100!=0) || y%400==0){
dayEnd=29;
}
dayEnd=28;
}else{
dayEnd=31;
}
//进行天条目删除
dd.options.length=0;
//根据判断条件进行重新添加日的条目
initSelect(dd,1,dayEnd);
//设置闰年,首先获取年份信息
var yyyy=document.byElementById("yyyy");
//获取当前年份的值
var y=parseInt(yyyy.value);
if((y%4==0 && y%100!=0) || y%400==0){
dayEnd=29;
}
dayEnd=28;
我把dayEnd=28写在下面了。
正在回答 回答被采纳积分+1
同学你好,1、同学理解是正确的。
2、mm.value是字符串类型的,使用parseInt可以将其转换为数值类型。这样便于判断月份能够输出对应的天数。
3、javaScript中可以不使用关键字直接赋值(如: y=parseInt(yyyy.value);)。没有使用关键字"var",则javaScript默认这变量是一个全局变量。也就是说,当使用var定义的变量是局部变量,而直接赋值的是全局变量。
4、getElementById()方法书写错误,建议同学进行修改如下图所示:
5、建议同学将 dayEnd=28;放置到上面,避免2月天数一致为28。如下图所示:
祝学习愉快!
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星