zoukankan      html  css  js  c++  java
  • Jquery 记一次使用fullcalendar的使用记录

    最近接了一个需求,把excel做的表格开发到系统里,本来想直接做成表格的形式,后来考虑到数据库中的表结构不好设计,最后决定做成日历的形式;

    先上成品图

    需要引用的js,fullcalendar官网可以下载

    <script src="~/Content/Scripts/jquery.fullcalendar/lib/moment.min.js"></script>
    <link href="~/Content/Scripts/jquery.fullcalendar/fullcalendar.css" rel="stylesheet" />
    <script src="~/Content/Scripts/jquery.fullcalendar/fullcalendar.js"></script>

    先贴上页面的代码

    <script>
        function calender() {
            var eventData = new Array();
            var id = new Array();
            var start = new Array();
            var content = new Array();
            //ajax 获取ecevnt数据
            var durl = encodeURI('@Url.Action("GetEventData", "Plan")');
            $.ajax({
                type: "post",
                url: durl,
                async: false,
                success: function (msg) {
                    var temp = msg.split("|");
                    id = temp[0].split(",");
                    start = temp[1].split(",");
                    content = temp[2].split(",");
                    for (var i = 0; i < id.length; i++) {
                        var TempObject = {};
                        TempObject["id"] = id[i];
                        TempObject["title"] = content[i];
                        TempObject["start"] = start[i];
                        
                        
    
                        eventData.push(TempObject);
                        alert(eventData[i].title);
                        //DataForMyChart2[i] = TempObject;
                        //TempObject = null;
                        //alert(DataForMyChart2[i].name);
                        //i++;
                    }
                },
                error: function () {
                    alert("出错了");
                }
            });
    
            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,basicWeek,basicDay'
                },
    
                //defaultDate: '2017-05-12',
                navLinks: true, // can click day/week names to navigate views
                editable: true,
                eventLimit: true, // allow "more" link when too many events
                monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
                monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
                dayNames: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
                dayNamesShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
                today: ["今天"],
                buttonText: {
                    today: '今天',
                    month: '',
                    week: '',
                    day: '',
                    prev: '上一月',
                    next: '下一月'
                },
                events: eventData,
                dayClick: function (date, allDay, jsEvent, view) {
                    //alert(date);
                    //新加event
    
                    var obj = new Array();
                    var reValue = window.showModalDialog('InsertPlan', obj, 'dialogWidth=400px;dialogHeight=200px;');
                    if (reValue == undefined) {
                        return false;
                    }
                    //alert(moment(date).format('YYYY-MM-DD'));
                    //alert($.fullCalendar.formatDate(date, "yyyy-MM-dd"));
                    //event.start.format('YYYY-MM-DD')
                    var durl = encodeURI('@Url.Action("InsertEventData", "Plan")?PlanContent=' + reValue + '&PlanDate=' + moment(date).format('YYYY-MM-DD'));
                    $.ajax({
                        type: "post",
                        url: durl,
                        async: false,
                        success: function (msg) {
                            if (msg > 0) {
                                //var tempcon = document.getElementById("tempcon").value;
                                //top.frames[tabiframeId()].windowload();
                                //alert("成功添加" + msg + "条记录");
                                //calender();
                                top.frames[tabiframeId()].Replace()
                                //closeDialog();
                                //SettagValue();
                                //alert("成功");
                            }
                            else {
                                alert("出错了!");
                            }
                        },
                        error: function () {
                            alert("出错了");
                        }
                    });
                },
                eventClick: function (event, jsEvent, view) {
                    alert(event.title);
                    var durl = encodeURI('@Url.Action("DeleteEventData", "Plan")?id='+event.id);
                    $.ajax({
                        type: "post",
                        url: durl,
                        async: false,
                        success: function (msg) {
                            if (msg > 0) {
                                alert("成功");
                            }
                            else {
                                alert("出错了!");
                            }
                        },
                        error: function () {
                            alert("出错了");
                        }
                    });
                }
            });
        }
    
        $(document).ready(function() {
            
            calender();
            
        });
    
        
        
    </script>
    <style>
    
        body {
            margin: 40px 10px;
            padding: 0;
            font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
            font-size: 14px;
        }
    
        #calendar {
            max-width: 900px;
            margin: 0 auto;
        }
    
    </style>
    <body>
    
        <div id='calendar'></div>
    
    </body>

    支持的数据格式 

    [
      {
        "title": "All Day Event",
        "start": "2017-05-01"
      },
      {
        "title": "Long Event",
        "start": "2017-05-07",
        "end": "2017-05-10"
      },
      {
        "id": "999",
        "title": "Repeating Event",
        "start": "2017-05-09T16:00:00-05:00"
      },
      {
        "id": "999",
        "title": "Repeating Event",
        "start": "2017-05-16T16:00:00-05:00"
      },
      {
        "title": "Conference",
        "start": "2017-05-11",
        "end": "2017-05-13"
      },
      {
        "title": "Meeting",
        "start": "2017-05-12T10:30:00-05:00",
        "end": "2017-05-12T12:30:00-05:00"
      },
      {
        "title": "Lunch",
        "start": "2017-05-12T12:00:00-05:00"
      },
      {
        "title": "Meeting",
        "start": "2017-05-12T14:30:00-05:00"
      },
      {
        "title": "Happy Hour",
        "start": "2017-05-12T17:30:00-05:00"
      },
      {
        "title": "Dinner",
        "start": "2017-05-12T20:00:00"
      },
      {
        "title": "Birthday Party",
        "start": "2017-05-13T07:00:00-05:00"
      },
      {
        "title": "Click for Google",
        "url": "http://google.com/",
        "start": "2017-05-28"
      }
    ]

    后台c#获取string数据的方法

    /// <summary>
            /// 提供calendar数据
            /// </summary>
            /// <returns>id1,id2|date1,date2|conten1,conten2</returns>
            public string GetEventData()
            {
                string sql = "select PlanID,Plandate,PlanContent from fy_plan where userid='" + ManageProvider.Provider.Current().UserId+"'";
                DataTable dt = PlanBll.GetDataTable(sql);
                string result = "";
                string temp1 = "";
                string temp2 = "";
                string temp3 = "";
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        temp1 = temp1 + dt.Rows[i][0] + ",";
                        temp2 = temp2 + dt.Rows[i][1] + ",";
                        temp3 = temp3 + dt.Rows[i][2] + ",";
                    }
                    temp1 = temp1.Substring(0, temp1.Length - 1);
                    temp2 = temp2.Substring(0, temp2.Length - 1);
                    temp3 = temp3.Substring(0, temp3.Length - 1);
                }
                result = temp1 + "|" + temp2 + "|" + temp3;
                return result;
            }

    最后,总结几点使用中遇到的难点

    1、fullcalendar插件中dayClick方法的date参数转换成正确的格式:moment(date).format('YYYY-MM-DD')

    2、在拼接前台的字符串的时候要小心,大部分报错基本都是格式错误,我自己也检查了很多次才发现问题

    ---------------------------------------------------------------------分割线20170818,记录下fullcalendar  ajax获取数据实时更新的方法

    1、实现需求,点击上一月下一月时重新获取数据,页面不刷新

         实现步骤:1.1在fullcalendar.js 中的上一月下一月点击事件中添加自己的获取数据方法:

                                 

    prev: function () {
            //alert(11);
            var prevInfo = this.view.buildPrevDateProfile(this.currentDate);
    
            if (prevInfo.isValid) {
                this.currentDate = prevInfo.date;
                
                this.renderView();
                ChangMonth(prevInfo.date.toString());  //此处是新添加的获取数据方法,传递了日期参数
                
            }
            
        },
    
    
        next: function () {
            //alert(11);
            var nextInfo = this.view.buildNextDateProfile(this.currentDate);
    
            if (nextInfo.isValid) {
                this.currentDate = nextInfo.date;
                
                this.renderView();
                ChangMonth(nextInfo.date.toString());
                
            }

               2.2  ChangMonth()实现方法

    function ChangMonth(date)
        {
            //alert(11);
            var eventData = new Array();
            var id = new Array();
            var start = new Array();
            var content = new Array();
            var color = new Array();
            //ajax 获取ecevnt数据
            var durl = encodeURI('@Url.Action("GetEventData", "Plan")?Date=' + date);
            $.ajax({
                type: "post",
                url: durl,
                async: false,
                success: function (msg) {
                    if (msg == "|||") {
                        //没有数据的时候不做处理,不然分割的时候js会报错
                    }
                    else {
                        var temp = msg.split("|");
                        id = temp[0].split(",");
                        start = temp[1].split(",");
                        content = temp[2].split(",");
                        color = temp[3].split(",");
                        for (var i = 0; i < id.length; i++) {
                            var TempObject = {};
                            TempObject["id"] = id[i];
                            if (color[i] == "#36648B") {
                                TempObject["title"] = 1+" "+content[i];
                            }
                            else if (color[i] =="#388E8E")
                            {
                                TempObject["title"] = 2 + " " + content[i];
    
                            }
                            else if (color[i] == "#8B2252")
                            {
                                TempObject["title"] = 3 + " " + content[i];
                            }
                            else if (color[i] == "grey")
                            {
                                TempObject["title"] = 4 + " " + content[i];
                            }
                            else
                            {
                                TempObject["title"] = content[i];
                            }
                            TempObject["start"] = start[i];
                            TempObject["allDay"] = true;
                            TempObject["backgroundColor"] = color[i];
                            eventData.push(TempObject);
                            //alert(eventData[i].title);
                            //DataForMyChart2[i] = TempObject;
                            //TempObject = null;
                            //alert(DataForMyChart2[i].name);
                            //i++;
                        }
                    }
                },
                error: function () {
                    alert("出错了");
                }
            });
            //fullcalendart
            $('#calendar').fullCalendar('removeEvents');
            $('#calendar').fullCalendar('renderEvents', eventData, true);
            loadData();
        }

    注意最后两句,这两句是重新绘制数据,第一句移除原来的数据,第二句重新添加新获取的数据

    $('#calendar').fullCalendar('removeEvents');

    $('#calendar').fullCalendar('renderEvents', eventData, true);

  • 相关阅读:
    python线程的条件变量Condition的用法实例
    Django使用本地css/js文件的基本流程
    html添加css样式的两种方法
    Atom安装插件的几种方式
    Atom 编辑器实时预览 HTML 页面经典方法
    在Mac/linux上查找(并终止)进程锁定特定端口的几种方法
    Django使用Bootstrap的经典方法
    一个研发出身创业者的2019年收获与感悟
    百度DMA+小度App的蓝牙语音解决方案展示
    一个芯片小贩的2019年终总结
  • 原文地址:https://www.cnblogs.com/lovejunjuan/p/6932006.html
Copyright © 2011-2022 走看看