数据为undefined,,求大佬帮看下

来源:4-1 数据渲染

跳跃的鱼

2017-05-05 22:18

请问一下为何我最终是undefined,获取不到数据,结果为Null

(function () {
    var datepicker = {};

    datepicker.getMonthData = function (year,month) {//获取一个月的数据,

        var ret = [];

        if (!year || !month){
            var today = new Date();
            year = today.getFullYear();//获取年份
            month = today.getMonth()+1;//获取月份
        }
        var firstDay = new Date(year,month-1,1);//获取当月的第一天

        var firstDayWeekDay = firstDay.getDay();//获取第一天是星期几

        if ( firstDayWeekDay===0){//判断是否是周日
            firstDayWeekDay = 7;
        }

        year = firstDay.getFullYear();
        month = firstDay.getMonth() + 1;

        var lastDayOfLastMonth = new Date(year,month-1,0);//获取上个月的最后一天

        var lastDateOfLastMonth = lastDayOfLastMonth.getDate();
        // console.log(lastDateOfLastMonth);

        var preMonthDayCount = firstDayWeekDay - 1;//

        var lastDay = new Date(year,month,0);//本月的最后一天
        var lastDate = lastDay.getDate();

        for(var i=0;i<7*6;i++){
            var date = i + 1 - preMonthDayCount;
            var showDate = date;
            var thisMonth = month;


            if (date<=0){  //上一月
                thisMonth = month - 1;
                showDate = lastDateOfLastMonth + date;
            }else if(date > lastDate){//下一月
                thisMonth = month + 1;
                showDate = showDate - lastDate;
            }

            if(thisMonth === 0) thisMonth = 12;
            if(thisMonth ===13) thisMonth = 1;

            ret.push({
                month:thisMonth,//月份
                date:date,  //真实日期
                showDate:showDate//显示的日期
            });
        }
        return{
            year:year,
            month:month,
            days:ret
        }
    };


    window.datepicker = datepicker;//用window定义的变量是全局的变量
})();

main.js

(function () {

    var datepicker = window.datepicker;

    datepicker.buildUi = function (year ,month) {   //buildUi 为渲染函数
        var monthData = datepicker.getMonthData(year,month);

        var html = '<div class="ui-datepicker-header">'+
            '<a href="#" class="ui-datepicker-btn ui-datepicker-prev-btn">&lt;</a>'+
            '<a href="#" class="ui-datepicker-btn ui-datepicker-next-btn">&gt;</a>'+
            '<span class="ui-datepicker-curr-month">'+monthData.year +'-'+monthData.month+'</span>'+
            '</div>'+

            '<div class="ui-datepicker-body">'+
            '<table>'+
            '<thead>'+
                '<tr>'+
                    '<th>一</th>'+
                    '<th>二</th>'+
                    '<th>三</th>'+
                    '<th>四</th>'+
                    '<th>五</th>'+
                    '<th>六</th>'+
                    '<th>日</th>'+
                '</tr>'+
            '</thead>'+

            '<tbody>';
                for(var i=0;i<monthData.days.length;i++){
                    var date = monthData.days[i];
                    if (i%7 ===0){
                        html +='<tr>';
                    }
                    html +='<td>'+date.showDate + '</td>';

                    if (i%7 ===6){
                        html +='</tr>';
                    }
                }
            html +='</tbody>'+
            '</table>'+
            '</div>';
    };

    datepicker.init=function ($dom) {
        var html = datepicker.buildUi();
        $dom.innerHTML = html;
    };
})();


写回答 关注

3回答

  • TooooBug
    2017-05-08 13:10:28

    详细描述一下,哪里不对?

    邝chuan...

    (function () { })() 这样写是为了不去污染全局命名空间,这种写法创建了一个新的函数作用域,不会触碰到全局对象了。如果你需要全局对象, (function (global) { var datepacker = global.datepicker; })(this)

    2017-09-14 22:43:40

    共 1 条回复 >

  • 李羊羊
    2017-05-25 15:16:49

    buildUi没返回html,其他看不出来

  • 西兰花伟大炮
    2017-05-06 14:33:59

    循环那里应该是var date = MonthDate[i]

    慕的地148... 回复tpbaby

    嗯嗯嗯

    2017-06-22 16:37:00

    共 3 条回复 >

DatePicker组件开发

使用原生JS完成一个日期选择器(datepicker)组件的开发

17743 学习 · 64 问题

查看课程

相似问题