第二种方法实现年月日的三级联动,请老师检查。
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
同学你好,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天。祝学习愉快!
同学你好,已经实现三级联动,但修改日期后就无法回到原本的日期。同学可参考:
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); } }
祝学习愉快!
- 参与学习 人
- 提交作业 626 份
- 解答问题 4930 个
想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星