关于改变事件问题

关于改变事件问题

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回答
好帮手慕小尤 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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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