关于7-5的实现三级联动的另一种日期设置方法的相关问题讨论

来源:7-9 JS对表单元素进行设置5

litter_

2019-05-14 17:16:39

// 完成作业:另一种方法实现年月日的三级联动

function selectYmd(){

var yyyy = document.getElementById("yyyy");

var mm = document.getElementById("mm");

var dd = document.getElementById("dd");

var year = parseInt(yyyy.value);

var days;

var month = parseInt(mm.value);

switch(month){

case 4:

case 6:

case 9:

case 11:

days = 30;

break;

case 2:

days = 28;

var isLeapYear = (year%4==0)&&(year%100!=0) || (year%400==0) ;

if(isLeapYear) {

days = 29;

}

break;

default :

days = 31;

}

//用切换前的天数值跟切换后月份的天数进行比较;

var minusDays = (dd.length) - days;

console.log(minusDays);

if(minusDays>0){

//切换前比切换后的天数多出了minusDays的天数,在原来的基础上减去多余的天数

// for(var i=dd.length-1;i>=dd.length-1-minuDays;i--){

// dd.options.remove(i)

// }

dd.options.length = days;

}else if(minusDays < 0){

//切换前比切换后的天数少了minusDays的天数,在原来的基础上加上需要增加的天数

var temp = Math.abs(minusDays);

InitSelect(dd,dd.length+1,dd.length+temp);

}


}



写回答

2回答

好帮手慕柯南

2019-05-14

同学你好!同学的思路是正确的呢,但是同学的代码有一点小问题:

  1. 同学的单词两次拼写不同
    http://img.mukewang.com/climg/5cda9685000100bc06020229.jpg

2. 每删除一个日期,dd.length的长度就在减少,最终会导致死循环

http://img.mukewang.com/climg/5cda97160001c20405660151.jpg

3,建议同学将限制循环的条件存在变量中,在循环时使用,参考:

http://img.mukewang.com/climg/5cda976d00014fd304820134.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

litter_

提问者

2019-05-14

我的基本思路就是前面的部分的代码跟前面是一摸一样的,但是在后面我想利用切换前后的天数差值实现天数动态的增加和删除操作,也就是进行差值的比较,天数相减为负值,则在原来的基础上加上相差的天数,若是正值,则在原来的天数基础上减去多出的天数。

然而我碰到了一个问题,就是在天数差值为正,也就是需要在原来的天数基础上减去差值的时候,我调用了remove方法,企图通过最后一个元素依次往前删除差值个元素,也就是注释当中的for循环,但是我这么做产生了奇怪的bug,我一时无法解决,就只好采用长度的设置来截取原本的天数达到我删除的目的。但是这么做就不能满足题目要求,还请老师赐教。

0

0 学习 · 9666 问题

查看课程