JavaScript 8-5的课后作业

JavaScript 8-5的课后作业

​// 根据大小月自动改变天数
function selectYmd(){
var yyyy=document.getElementById('yyyy');
var mmmm=document.getElementById('mmmm');
var dddd=document.getElementById('dddd');
var m=parseInt(mmmm.value);
var dayEnd;
if(m==2){
dayEnd=28;
var y=parseInt(yyyy.value);
if ((y % 4==0 && y % 100!=0) || y % 400==0){
dayEnd=29;
}
for(i=dddd.length;i>=dayEnd;i--){
dddd.options.remove(i);
}
}else if(m==4 || m==6 || m==9 || m==11){
if(dddd.length == 28){
initSelect(dddd,28,30);
}else if(dddd.length == 29){
initSelect(dddd,29,30);
}else{
dddd.options.remove(30);
}
}else{
initSelect(dddd,dddd.length,31);
}
}

老师,我这里出现了2个问题

1.只有一开始先改成闰年,2月才会变29天,其他情况只会28天

2.开始从大月换成小月,小月会是30天,再换成大月就不执行了30天了,但是换成2月再换小月就又会是30天了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,同学应将for循环语句放在条件判断语句外,将i的值与dayEnd做比较,若大于则去掉多余的天数,下标从0开始,因此应是i-1移除掉最后一个

function selectYmd() {
var yyyy = document.getElementById("yyyy");
var mm = document.getElementById("mm");
var dd = document.getElementById("dd");
var m = parseInt(mm.value);
var dayEnd;
if (m == 4 || m == 6 || m == 9 || m == 11) {
dayEnd = 30;
} else if (m == 2) {
dayEnd = 28;
y = parseInt(yyyy.value);
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
dayEnd = 29;
}
} else {
dayEnd = 31;
}
for (i = dd.length; i > dayEnd; i--) {
dd.options.remove(i - 1);
}
for (i = dd.length; i < dayEnd; i++) {
dd.options.add(new Option(i + 1, i));
}
}


  • 起名真的好烦 提问者 #1

    老师这就是第二种方法的答案吗 没有用到initSelect()方法呀

    2020-11-29 15:30:20
  • 好帮手慕美 回复 提问者 起名真的好烦 #2

    同学,你好,该题实现的方式有很多,若要使用initSelect()可参考下述代码:

    function selectYmd() {
    var yyyy = document.getElementById("yyyy");
    var mm = document.getElementById("mm");
    var dd = document.getElementById("dd");
    var m = parseInt(mm.value);
    var dayEnd;
    // 将长度设置为27
    for (var i = dd.length; i > 27; i--) {
    dd.options.remove(i - 1);
    }
    if (m == 2) {
    dayEnd = 28;
    var y = parseInt(yyyy.value);
    if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
    dayEnd = 29;
    }
    } else if ((m == 4 || m == 6 || m == 9 || m == 11)) {
    dayEnd = 30;
    } else {
    dayEnd = 31;
    }
    initSelect(dd, 28, dayEnd);
    }

    ​祝学习愉快~~~~

    2020-11-29 16:18:42
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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