第二种方法实现年月日的三级联动,请老师检查。

第二种方法实现年月日的三级联动,请老师检查。

function ymd(){
  //获取id=yyyy的控件
  var yyyy=document.getElementById("yyyy");
  var mm=document.getElementById("mm");
  var dd=document.getElementById("dd");
  var date=new Date();
  var year=parseInt(date.getFullYear());
  initSelect(yyyy,1999,year);
  initSelect(mm,1,12);
  initSelect(dd,1,31);
  // 获取列表框的长度
  var n=yyyy.length;
  // 列表框选中某一个条目
  yyyy.selectedIndex=Math.round(n/2);
  // 将某个列表框的条目数设置为零,效果是删除
  // dd.options.length=0;
}
/*给列表框赋值,传递三个参数:表单元素,开始值,结束值*/
function initSelect(obj,start,end){
  for(var i=start;i<=end;i++){
     obj.options.add(new Option(i,i));
  }
}

//完成作业:第二种方法实现年月日的三级联动
function deleteSelect(){
  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){
     dd.options.remove(30);
  }else if(m==2){
     for(i=dd.length;i>=28;i--){
        dd.options.remove(i-1);
     }
     y=parseInt(yyyy.value);
     if((y % 4==0 && y % 100 !=0) || y % 400 ==0){
        for(i=dd.length;i>=29;i--){
           dd.options.remove(i-1);
        }
     }
  }

}


正在回答 回答被采纳积分+1

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

2回答
好帮手慕小尤 2019-08-15 10:15:10

同学你好,1. 可以尝试代码,点击二月后再次点击其他月份都会显示为二月的天数。所以需要使用第一种方式。也就是或者调用initSelect方法将天数恢复到31天。代码如下:

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

2. 在js代码中并没有看见同学调用initSelect方法(可能同学在测试中有新添置其他的调用方法,而在代码中并没有显示导致的误会)。

3. 方法二是删除多于的几天但无法恢复到其他月份的天数,如果不清空数据直接添加就会出现多个31天。祝学习愉快!

好帮手慕小尤 2019-08-14 17:21:11

同学你好,已经实现三级联动,但修改日期后就无法回到原本的日期。同学可参考:

  function gb(){
      var yyyy=document.getElementById("yyyy");
      var mm=document.getElementById("mm");
      var dd = document.getElementById("dd");
      var m=mm.value;
      var cutday;
      if(m==4 || m==6 || m==9 || m==11){
          cutday=30;
      }else if(m==2){
          cutday=28;
          y=parseInt(yyyy.value);
          if((y % 4==0 && y % 100 !=0) || y % 400 ==0){
              cutday=29;
          }
      } else {
          cutday=31;
      }
      // 保证删除数据后还可以恢复原本的天数
      dd.options.length=0;
      for(var i=1;i<=cutday;i++){
          dd.options.add(new Option(i,i));
      }
      // 删除某option中的数据
      for(var i=31; i>cutday; i--){
          dd.options.remove(i);
      }
  }

祝学习愉快!

  • 提问者 weixin_慕沐1043483 #1
    请问为什么说我的代码修改日期后就无法回到原本的日期?有点不知道怎么看。
    2019-08-14 21:28:27
  • 提问者 weixin_慕沐1043483 #2
    我的代码中调用了initSelect()自定义函数,这个函数不能保证删除数据后还可以恢复原本的天数吗?
    2019-08-14 21:38:55
  • 提问者 weixin_慕沐1043483 #3
    还有,请问老师,你的这个不算是第一个方法吗?你的方法即使不加for(var i=31; i>cutday; i--){dd.options.remove(i); }不是也可以实现三级联动吗?
    2019-08-14 21:44:02
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
PHP小白零基础入门
  • 参与学习           人
  • 提交作业       626    份
  • 解答问题       4930    个

想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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