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