关于第二种方法

关于第二种方法

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script type="text/javascript" src="path/index.js"></script>

</head>

<body onload="ymd()">

<form>

<select name="yyyy" id="yyyy"  onchange="selectYmd()" ></select>年

<select name="yyyy" id="mmmm" onchange="selectYmd()"></select>月

<select name="yyyy" id="dddd"></select>日

<input type="button" name="" value="删除列表框条目" onclick="deleteSelect()">

</form>

</body>

</html>

function ymd(){
//获取id=yyyy的控件;分别年,月,日;
var yyyy=document.getElementById("yyyy");
var mmmm=document.getElementById("mmmm")
var dddd=document.getElementById("dddd");
//设置最后1年为当前年限
var date=new Date();
var year=parseInt(date.getFullYear());
//对年进行赋值
initSelect(yyyy,1999,year);
//对月进行赋值
initSelect(mmmm,1,12);
//对日进行赋值
initSelect(dddd,1,31);
//获取列表的框的长度;
var n=yyyy.length;
//列表框选中某一个项目;
yyyy.selectedIndex=Math.round(n/2);
//天列表框的长度为0,也就是删除天列表框的条目信息;
// dddd.options.length=0;
}
//给列表框赋值,传递三个参数:表单元素、开始值、结束值
function initSelect(obj,start,end) {
for(var i=start;i<=end;i++){
//在对象中添加内容;第一个代表本文显示的内容、第二个为value;
//给obj控件(也就是表单元素)添加条目也就是option,new Option中添加的内容,第一个属性内容,第二个value的值;
obj.options.add(new Option(i,i));

}
}
//删除列表框的某一个条目,即:按索引号删除
function deleteSelect(){
//对日条目进行删除,先获取信息
var dd=document.getElementById("dddd");
dd.options.remove(1);
}

//添加改变事件 第二种方法
function deleteSelect(){
//对日条目进行删除,先获取信息
var dd=document.getElementById("dddd");
dd.options.remove(1);
}

//添加改变事件 第二种方法
function selectYmd(){
//获取年的元素的value
var y=parseInt(document.getElementById("yyyy").value);
//获取月控件的value
var m=parseInt(document.getElementById("mmmm").value);
var dd=document.getElementById("dddd");
//设置月份的天数
var d=31;

initSelect(dd,1,d);
//if判断,月份对应的天数
if(m==4||m==6||m==9||m==11){
for(var i=dd.length;i>30;i--){
dd.options.remove(i);}
}else if(m==2){

for(var i=dd.length;i>28;i--){
dd.options.remove(i-1);
}
if((y%4==0&& y%100!=0)||y%400==0){

for(var i=dd.length;i>29;i--){
dd.options.remove(i-1);
}
}

}else {
dd.options.length=0;
initSelect(dd,1,d);
}


}

选择1,2月都没问题,但是选择3月成为31天后,3月以后都是31天了。 为什么呢

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

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

2回答
好帮手慕阿慧 2021-03-02 19:07:07

同学你好,

1、同学可以使用i>29,这也是可以的。

2、老师这边测试没有问题,并没有复现同学的问题。第二种方法比较绕。建议同学使用课程中老师的第一种方法,先算出月份中日子数,设置dd.options.length=0,然后往dd中添加元素。

祝学习愉快~

好帮手慕阿慧 2021-03-02 14:54:47

同学你好,2月份天数有误,在2月份中,当是闰年(如2000年)时,应该移除option选项,直到dd.length为29。当不是闰年时,应该移除option选项,直到dd.length为28。

参考代码如下:

http://img1.sycdn.imooc.com//climg/603de1280907570006310623.jpg

function ymd() {
    //获取id=yyyy的控件;分别年,月,日;
    var yyyy = document.getElementById("yyyy");
    var mmmm = document.getElementById("mmmm")
    var dddd = document.getElementById("dddd");
    //设置最后1年为当前年限
    var date = new Date();
    var year = parseInt(date.getFullYear());
    //对年进行赋值
    initSelect(yyyy, 1999, year);
    //对月进行赋值
    initSelect(mmmm, 1, 12);
    //对日进行赋值
    initSelect(dddd, 1, 31);
    //获取列表的框的长度;
    var n = yyyy.length;
    //列表框选中某一个项目;
    yyyy.selectedIndex = Math.round(n / 2);
    //天列表框的长度为0,也就是删除天列表框的条目信息;
    // dddd.options.length=0;
}
//给列表框赋值,传递三个参数:表单元素、开始值、结束值
function initSelect(obj, start, end) {
    for (var i = start; i <= end; i++) {
        //在对象中添加内容;第一个代表本文显示的内容、第二个为value;
        //给obj控件(也就是表单元素)添加条目也就是option,new Option中添加的内容,第一个属性内容,第二个value的值;
        obj.options.add(new Option(i, i));

    }
}
//删除列表框的某一个条目,即:按索引号删除
function deleteSelect() {
    //对日条目进行删除,先获取信息
    var dd = document.getElementById("dddd");
    dd.options.remove(1);
}

//添加改变事件 第二种方法
function deleteSelect() {
    //对日条目进行删除,先获取信息
    var dd = document.getElementById("dddd");
    dd.options.remove(1);
}

//添加改变事件 第二种方法
function selectYmd() {
    //获取年的元素的value
    var y = parseInt(document.getElementById("yyyy").value);
    //获取月控件的value
    var m = parseInt(document.getElementById("mmmm").value);
    var dd = document.getElementById("dddd");
    //设置月份的天数
    var d = 31;

    initSelect(dd, 1, d);
    //if判断,月份对应的天数
    if (m == 4 || m == 6 || m == 9 || m == 11) {  //30天
        //for (var i = dd.length; i > 30; i--) {
        for (var i = dd.length; i >= 30; i--) {
            dd.options.remove(i);
        }
        console.log(dd.length);
    } else if (m == 2) {
        if((y % 4==0 && y % 100 !=0) || y % 400 ==0){
            //29天
            for (var i = dd.length; dd.length > 29; i--) {
                dd.options.remove(i - 1);
            }
        }else{
            //28天
            for (var i = dd.length; dd.length > 28; i--) {
                dd.options.remove(i - 1);
            }
        }
        console.log(dd.length);
    } else {
        dd.options.length = 0;
        initSelect(dd, 1, d);
    }
}

祝学习愉快~

  • 提问者 rock221 #1

    为什么是  for (var i = dd.length; dd.length > 29; i--)   不是i>29呢?

    2021-03-02 15:10:23
  • 提问者 rock221 #2

    还有一个问题,为什么我的代码,选择3月以后就瘫痪掉了阿,不会动了。

     function selectYmd(){
    //获取年的元素的value
    var y=parseInt(document.getElementById("yyyy").value);
    //获取月控件的value
    var m=parseInt(document.getElementById("mmmm").value);
    var dd=document.getElementById("dddd");
    //设置月份的天数
    var d=31;

    initSelect(dd,1,d);
    //if判断,月份对应的天数
    if(m==4||m==6||m==9||m==11){
    for(var i=dd.length;i=>30;i--){
    dd.options.remove(i);
    }
    }else if(m==2){
    if((y%4==0&& y%100!=0)||y%400==0){
    //29天
    for(var i=dd.length;dd.length>29;i--){
    dd.options.remove(i-1);
    }
    }else{
    for(var i=dd.length;dd.length>28;i--){
    dd.options.remove(i-1);
    }
    }

    }else {
    dd.options.length=0;
    initSelect(dd,1,d);
    }


    }

    ​就这段代码,哪里出错了啊。和老师写的一样啊

    2021-03-02 15:15:32
  • 提问者 rock221 #3

    我反复试验了下,这段代码用老师的,反复了很多次后再3月之后,点了之后无反应,页面刷新也一直缓冲。无反应。 这是怎么了啊

    2021-03-02 15:27:44
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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