当前位置: 首页 > news >正文

JQuery FullCalendar(二)

前言:根据前文介绍,我们对JQuery FullCalendar如何从后台取数据有了初步了解,已经实现最基本的要求。下面介绍一下FullCalendar的事件

$('#calendar').fullCalendar("getView")的属性
name :        month   当前视图类型,月(month),周(agendaWeek),日(agendaDay)
title :           2013年11月   当前视图显示的年月
start :          2013-11-01 00:00:00   当前视图该月份(星期)的第一天
end :            2013-12-01 00:00:00   当前视图该月份(星期)的最后一天+1
visStart :   2013-10-27 00:00:00   当前视图的第一天日期
visEnd :     2013-12-08 00:00:00   当前视图的最后一天日期

$('#calendar').fullCalendar("getDate")

getDate :   2013-11-21 08:06:20  当天日期详细

一、dayClick事件

dayClick,当单击日历中的某一天时,触发callback
date :         2013-11-19 00:00:00 点击的day的时间
allDay :     true              是否为全天事件
jsEvent :  [object Object]
view :        [object Object]

dayClick: function (date, allDay, jsEvent, view) {
                    
if
 ($(this).hasClass("bg")) {
                           $(
this
).removeClass("bg");   
//设置点击日期的背景颜色
                    } 
else
 {
                           $(
this
).addClass("bg");
                    }
alert("name :" + $('#calendar').fullCalendar("getView").name); alert("getDate :" + $.fullCalendar.formatDate($('#calendar').fullCalendar("getDate"), "yyyy-MM-dd HH:mm:ss") ); alert("date :" + $.fullCalendar.formatDate(date, "yyyy-MM-dd HH:mm:ss") ); //点击的day的时间 alert("allDay :" + allDay ); alert("jsEvent :" + jsEvent); alert("view :" + view); }

 

二、eventClick事件

eventClick,当点击日历中的某一日程(事件)时,触发此操作
calEvent.id:返回当前点击对象的id(id值和数据库的一致)
calEvent.title:返回当前点击对象的title(title值和数据库的一致)

eventClick: function (calEvent, jsEvent, view) {
                    alert('calEvent.id: ' + calEvent.id);
                    alert('calEvent.title: ' + calEvent.title);
                    alert('calEvent.start: ' + calEvent.start);
                    $(this).css('border-color', 'red');
                }

三、eventAfterRender

当日程事件被渲染后触发
event: 返回渲染对象的数据
element: 包含渲染对象的HTML内容,可以对其进行重写
view:返回当前视图

通过打印element.html()我们可以观察其内容,也可以用开发者工具查看对应的html代码

image

可以发现,显示在网页上的内容由两个span标记显示出来的,并且第一个div标记的class含有inner字样,先来看看这个结构

image

其实这个日程事件(fc-event-inner)就渲染在class名为fc-event-container的div中,并且和element.html()内容是吻合的,

于是猜测修改此处代码可以修改前台页面的显示,替代element.html()里面的元素,并且为日历表单元格添加背景颜色和点击事件

eventAfterRender: function (event, element, view) {
                    if (view.name == "month") {
                        var startTime = $.fullCalendar.formatDate(event.start, "yyyy-MM-dd");
                        var evtcontent = '<div class="fc-event-inner">';
                        evtcontent = evtcontent + '<span class="fc-event-time">' + startTime + '</span>';
                        evtcontent = evtcontent + '<span class="fc-event-title">' + event.title + '</span>';
                        evtcontent = evtcontent + '</div>';
                        //如果不加入下面的html,页面日程事件可以拖动,无法改变大小
                        evtcontent = evtcontent + '<div class="ui-resizable-handle ui-resizable-e">&nbsp;&nbsp;&nbsp;</div>';
                        element.html(evtcontent);
                        //通过开发者工具调试页面,发现其单元格含有data-date=2013-11-21这样的标记表示单元格
                        $("[data-date=" + startTime + "]").addClass("bg");
                        $("[data-date=" + startTime + "]").click(function () {
                            location.href = "index.aspx";
                        });
                    }
                }

image

到此,不难发现要控制FullCalendar页面样式是件很简单的事情了,因为我们掌握了它的结构,可以用开发者工具详细研究,通过CSS或者其他方式控制样式

四、eventDrop,eventResize

这是一个很酷的事件,拖动日期事件的时间(start,end同时改变相同的timespan),改变日程事件的结束时间(改变end的时间)
前提是editable:true(默认值也是true)

event.id:返回当前日期的ID值,对应数据库的ID
dayDelta:保存日期向前或向后移动了多少天
minuteDelta:这个值只有在agenda视图有效,移动的时间

        eventDrop: function (event, dayDelta, minuteDelta,allDay) {
             $.post("json.ashx?action=move", { "event": event.id, "dayDelta": dayDelta, "minuteDelta": minuteDelta }, function (data) { });
                },
        eventResize: function (event, dayDelta, minuteDelta,allDay) {
             $.post("json.ashx?action=resize", { "event": event.id, "dayDelta": dayDelta, "minuteDelta": minuteDelta }, function (data) { });
                }

在后台,我们简单处理一下递交过来的数据

            else if (action == "move")
            {
                int dayDelta = int.Parse(context.Request["dayDelta"]);
                int minuteDelta = int.Parse(context.Request["minuteDelta"]);
                int id = int.Parse(context.Request["eventid"]);
                AddNewsDataContext db = new AddNewsDataContext();
                var res = db.calendar.Single(b => b.Id == id);
                res.start = res.start.Value.AddDays(dayDelta);
                res.end = res.end.Value.AddDays(dayDelta);
                res.start = res.start.Value.AddMinutes (minuteDelta);
                res.end = res.end.Value.AddMinutes(minuteDelta);
                db.SubmitChanges();
            }
            else if (action == "resize")
            {
                int dayDelta = int.Parse(context.Request["dayDelta"]);
                int id = int.Parse(context.Request["eventid"]);
                int minuteDelta = int.Parse(context.Request["minuteDelta"]);
                AddNewsDataContext db = new AddNewsDataContext();
                var res = db.calendar.Single(b => b.Id == id);
                res.end = res.end.Value.AddDays(dayDelta);
                res.end = res.end.Value.AddMinutes(minuteDelta);
                db.SubmitChanges();
            }

转载于:https://www.cnblogs.com/wubian/p/3441424.html

相关文章:

  • 在Pd中取消Code Name 同步
  • QTREE5 - Query on a tree V(LCT)
  • C/C++ Volatile关键词深度剖析
  • word2vec原理(一) CBOW与Skip-Gram模型基础——转载自刘建平Pinard
  • Treap实现的名次树
  • 最短路径SPFA算法(邻接表存法)
  • python 读取文件基本格式
  • Spring注入静态变量
  • Hadoop的hdfs api操作
  • 反射获取枚举的属性注释
  • 各种卷积结构原理及优劣总结
  • linux 程序管理
  • mysql 索引使用教程
  • C#操作MongoDB
  • 分页器(自定制)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [nginx文档翻译系列] 控制nginx
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • git 常用命令
  • HTML中设置input等文本框为不可操作
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • jquery cookie
  • JS学习笔记——闭包
  • nodejs实现webservice问题总结
  • PAT A1017 优先队列
  • python_bomb----数据类型总结
  • Rancher-k8s加速安装文档
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vim 折腾记
  • 回顾2016
  • 坑!为什么View.startAnimation不起作用?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何胜任知名企业的商业数据分析师?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 通过git安装npm私有模块
  • 学习JavaScript数据结构与算法 — 树
  • 原生Ajax
  • elasticsearch-head插件安装
  • zabbix3.2监控linux磁盘IO
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 数据库巡检项
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​queue --- 一个同步的队列类​
  • # centos7下FFmpeg环境部署记录
  • #NOIP 2014#Day.2 T3 解方程
  • #传输# #传输数据判断#
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (JS基础)String 类型
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (四)汇编语言——简单程序
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)JAVA中的堆栈
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET/C# 的字符串暂存池