最近接了一个需求,把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 > )
{
for (int i = ; i < dt.Rows.Count; i++)
{
temp1 = temp1 + dt.Rows[i][] + ",";
temp2 = temp2 + dt.Rows[i][] + ",";
temp3 = temp3 + dt.Rows[i][] + ",";
}
temp1 = temp1.Substring(, temp1.Length - );
temp2 = temp2.Substring(, temp2.Length - );
temp3 = temp3.Substring(, temp3.Length - );
}
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);

Jquery 记一次使用fullcalendar的使用记录的更多相关文章

  1. jquery文件上传控件 Uploadify 问题记录

    Uploadify v3.2.1 首先引用下面的文件 <!--上传控件 uploadify--> <script type="text/javascript" s ...

  2. jquery实现对象数组 筛选出每条记录中的特定属性字段 及根据某个属性值筛选出指定的元素

    jquery实现对象数组 筛选出每条记录中的特定属性字段 直接上图: 源码: /** * 对后端返回的数据,筛选出符合报表的列项,多余的列项去除 */ function filterParams(da ...

  3. JQuery 记第N次被坑 - ajax请求字符集问题

    前言:两个功能差不多的页面,都是使用$.post()请求后台,页面A传递到后台的中文参数正常,页面B传递到后台的中文参数则为乱码 分析过程: ①使用chrome的开发者工具,分析两个页面的ajax请求 ...

  4. Jquery库自带的动画效果方法记录

    1.显示和隐藏hide()和show() <script type="text/javascript">             $(function() {      ...

  5. Jquery调用webService的四种方法 转载-记录

    我总结几个关键点 1. 服务必须声明为ScriptService(否则会出现下面的问题) 2.服务的方法不需要任何更改,保持原状 3.客户端用jquery的.ajax方法来调用 3.1 type必须是 ...

  6. jquery图片延迟加载 及 serializeArray、serialize用法记录

    1.使用jquery实现 图片延迟加载 由于用户访问页面需要加载很多的图片,延迟加载技术在电子商务网站领域越来越普及,淘宝商城,京东商城,凡客等访问量巨大的电子商务站点为了增加用户用户体验,访问速度以 ...

  7. 记一次创建LVM的日志记录

    先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...

  8. 记一次socket_create()函数耗时异常记录

    背景: 下午开发时突然整个页面耗时增加,空接口每次都需要2-3秒的耗时,一开始以为连开发环境数据库出现问题,最后断开数据库跑,发现还是很慢 最终逐步调试此页面耗时,定位到了socket_create( ...

  9. 记jQuery.fn.show的一次踩坑和问题排查

    最近很少已经很少用jQuery,因为主攻移动端,常用Zepto,其实很多细节和jQuery并不一样.最近又无意中接触到了PC的需求和IE6, 使用了jQuery,刚好踩坑了,特意记录一下. 本文内容如 ...

随机推荐

  1. 替换res\drawable中的图片

    现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...

  2. C++11新特性介绍 01

    阅读目录 1. 概述 2. long long 类型 3. 列表初始化 4. nullptr 空指针 5. constexpr变量 6. constexpr函数 7. using类型别名 8. aut ...

  3. mybatis Dynamic SQL

    reference: http://www.mybatis.org/mybatis-3/dynamic-sql.html Dynamic SQL One of the most powerful fe ...

  4. Gitlab 社区版安装部署和维护指南

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.这篇文章是在 Gitlab 7.4 的环境下配置的,相关内容可能已经过时. 后续做了一次迁移,将 Gitlab 升级到了 ...

  5. views中class定义(类的写法)CBV

    from django.views import View class Home(View): def dispatch(self, request, *args, **kwargs): print( ...

  6. Apache Hadoop 集群安装文档

    简介: Apache Hadoop 集群安装文档 软件:jdk-8u111-linux-x64.rpm.hadoop-2.8.0.tar.gz http://www.apache.org/dyn/cl ...

  7. servlet中关于下载

    package com.huawei.response; import java.io.BufferedInputStream;import java.io.IOException;import ja ...

  8. Dirichlet Process

    http://www.cnblogs.com/zhangbojiangfeng/p/5962039.html [各种函数推导]

  9. MYSQL TIMESTAMP with implicit DEFAULT value is deprecated.

    TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp se ...

  10. go_接口

    duck typeing 隐式的实现接口的方法就等于实现了接口 main函数 package main import ( "fmt" "learngo/retriever ...