最近接了一个需求,把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. 年薪30万的Android程序员必须知道的帖子

    https://github.com/Trinea/android-open-project

  2. Python开发一个WEB聊天室

    项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...

  3. uva-110-没有for循环的排序

    题意:看输出就懂了,暴力枚举题,字符串最大长度是8,所有长度等于8的长度是8!=1x2x3x4x5x6x7x8=40320,数据量比较小的.只是枚举的方向比较怪异,如下,长度等于3的串 a ab,ba ...

  4. leetcode561

    public class Solution { public int ArrayPairSum(int[] nums) { var list = nums.OrderBy(x => x).ToL ...

  5. 「小程序JAVA实战」小程序的页面重定向(60)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeyemianzhongdingxiang59/ 在我们正常的浏览网 ...

  6. Readme.MD 例子

    了解一个项目,恐怕首先都是通过其Readme文件了解信息.如果你以为Readme文件都是随便写写的那你就错了.github,oschina git gitcafe的代码托管平台上的项目的Readme. ...

  7. python模块的打包

    python模块的打包方法: http://blog.csdn.net/five3/article/details/7847551

  8. python常用option

    [python常用option] 1. -c cmd : program passed in as string (terminates option list) 解析字符串命令,不读cmd之后的op ...

  9. Thrift 实现 JAVA,PHP,C#,Python 互相通信

    Thrift介绍   https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/index.html 首先需要下载 Thrift.exe ...

  10. MySQL学习2---索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引, ...