关于改变事件问题

关于改变事件问题

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回答
好帮手慕小尤 2021-03-02 11:00:30

同学你好,1、同学理解是正确的。

2、mm.value是字符串类型的,使用parseInt可以将其转换为数值类型。这样便于判断月份能够输出对应的天数。

3、javaScript中可以不使用关键字直接赋值(如: y=parseInt(yyyy.value);)。没有使用关键字"var",则javaScript默认这变量是一个全局变量。也就是说,当使用var定义的变量是局部变量,而直接赋值的是全局变量。

4、getElementById()方法书写错误,建议同学进行修改如下图所示:

http://img1.sycdn.imooc.com//climg/603da9e1095f9ed706830767.jpg

5、建议同学将 dayEnd=28;放置到上面,避免2月天数一致为28。如下图所示:

http://img1.sycdn.imooc.com//climg/603daa2d09c21d6206290729.jpg

祝学习愉快!

  • 提问者 rock221 #1

    关于2的问题:

    如果通过var定义的变量, 但是是在全局域中声明的,那么它还是全局变量吧?但如果不添加var关键字,无论在哪个域中创建声明,都是全局的,理解对吗?

    关于3的问题;

    虽然mm.value获取的是 月份的值,月份的value是数值;但是mm.value是字符串类型,所以需要进行parseInt转换, 对吗?也就是  n="123",和n=123;虽然两者的value都是数值,但是类型是不同的;对吧?

    但是还有一个问题,我测试了,即使不进行数值转换,得到的结果也是没问题的啊;是为了严谨一些,防止出错吗?万一后期js中的信息要更改小数,这样就比较方便了?

    2021-03-02 11:11:50
  • 好帮手慕小尤 回复 提问者 rock221 #2

    同学你好,是的,同学理解都是正确的,继续加油!

    祝学习愉快!

    2021-03-02 13:51:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码