老师,用删除实现日期联动的条件判断太多了,有什么更好的办法吗?
来源:7-9 JS对表单元素进行设置5
weixin_慕虎5578550
2019-05-06 18:39:08
function ymd(){
var yyyy=document.getElementById("yyyy");
var mm=document.getElementById("mm");
var dd=document.getElementById("dd");
var date=new Date();
var yy=date.getFullYear();
initSelect(yyyy,1999,yy);
initSelect(mm,1,12);
initSelect(dd,1,31);
var n=yyyy.length;
yyyy.selectedIndex=Math.round(n/2);
}
function initSelect(obj,start,end){//删除(可以用下标删除最后一项)必然就涉及到增加,增加又只能在末尾,所以不能反序排列。
//如果用dd.options.length=29;改变,dd.options.length=31;后最后几天是空元素占位。
for(var i=start;i<=end;i++){
obj.options.add(new Option(i,i));
}
}
//根据年份/月份变化,删除多余天数
function changeDd(){
var yyyy=document.getElementById("yyyy");
var mm=document.getElementById("mm");
var dd=document.getElementById("dd");
var y=parseInt(yyyy.value);
var m=parseInt(mm.value);
if(m==4||m==6||m==9||m==11){//小月
if(dd.options.length==31){//判断目前天数,是增加几天,还是删除几天。一、不能用initSelect函数,因为一次会增加很多。
//二、必须有条件判断,防止改变事件导致的重复删除日期元素。
dd.options.remove(30);
}else if(dd.options.length==29){
dd.options.add(new Option(30,30));
}else if(dd.options.length==28){
dd.options.add(new Option(29,29));//由小到大增加
dd.options.add(new Option(30,30));
}
}else if(m==2){//2月
if((y % 4==0 && y % 100 !==0)||y % 400 ==0){
if(dd.options.length==31){
dd.options.remove(30);//由大到小删除,如果由小到大,则后面元素会顶上,删除下表就不用增加了
dd.options.remove(29);
}else if(dd.options.length==30){
dd.options.remove(29);
}else if(dd.options.length==28){
dd.options.add(new Option(29,29));
}
}else{
if(dd.options.length==31){
dd.options.remove(30);
dd.options.remove(29);
dd.options.remove(28);
}else if(dd.options.length==30){
dd.options.remove(29);
dd.options.remove(28);
}else if(dd.options.length==29){
dd.options.remove(28);
}
}
}else{//大月
if(dd.options.length==30){
dd.options.add(new Option(31,31));
}else if(dd.options.length==29){
dd.options.add(new Option(30,30));
dd.options.add(new Option(31,31));
}else if(dd.options.length==28){
dd.options.add(new Option(29,29));
dd.options.add(new Option(30,30));
dd.options.add(new Option(31,31));
}
}
}
1回答
同学你好!如果同学不想添加这么多判断的话,同学可以再写一个方法,里面是删除28,29,30,31,每次无论是什么月份先调用该方法将这4个日期删除,然后判断是大月还是下月,添加相应的日期,如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
相似问题