FullCalendar用日历的形式直观的展示了日程安排、代办事宜等事件,那么日历中的事件是怎么添加进去的呢?本文将结合实例使用PHP+MySQL+jQuery讲解如何在FullCalendar中新建事件。

查看演示DEMO 下载源码

本站之前已经推出的FullCalendar应用系列文章中,有介绍FullCalendar的基本使用,FullCalendar的选项配置 API,以及FullCalendar如何读取数据库中的数据,本文是建立在前面几个知识点之上的,如果您对FullCalendar还不了解,那建议您 先看下本站关于FullCalendar的文章。本文除了您具备基本的html,css知识外,还需要您对PHP,MySQL以及jQuery技术有一定的基础,对于如何连接数据库,以及PHP和jQuery的基本函数方法的使用本文不做讲解。

HTML

我们新建一个名称为cal_opt.html的文件,然后载入必须的CSS和JS文件。

<link rel="stylesheet" type="text/css" href="css/fullcalendar.css">
<link rel="stylesheet" type="text/css" href="css/fancybox.css">
<script src='js/jquery-1.9.1.min.js'></script>
<script src='js/jquery-ui-1.10.3.custom.min.js'></script>
<script src='js/fullcalendar.min.js'></script>
<script src='js/jquery.fancybox-1.3.1.pack.js'></script> 

以上文件中,jquery-ui是提供事件拖动、和日期选择器功能,fancybox是点击新建事件时提供弹出层功能。

接着,我们在body中加入以下代码:

<div id="calendar"></div> 

jQuery

我们调用fullCalendar日历插件,日历中的events事件数据源来源于json.php,在上一篇文章中我们已经讲解,它是通过PHP读取mysql数据然后生成JSON数据格式返回给fullCalendar渲染事件。

好,到这里我们关键的一步到来了,我们通过单击日历中的任意日期空白格子时,弹出一个要求输入事件相关信息的层,通过在层中的表单输入相关信息并提交来完成新建事件的操作。

FullCalendar提供了dayClick方法,当dayClick发生时,调用回调函数,这里首先要将fullCalendar的日期格式 化处理(fullCalendar文档中有说明),因为我们需要将日期作为参数传给弹出层的表单。然后调用fancybox弹出层,我们使用ajax调 用,调用的url是event.php,并追加参数,以下是完整代码:

$(function() { $('#calendar').fullCalendar({ events: 'json.php', //事件数据源 dayClick: function(date, allDay, jsEvent, view) { var selDate =$.fullCalendar.formatDate(date,'yyyy-MM-dd');//格式化日期 $.fancybox({//调用fancybox弹出层 'type':'ajax', 'href':'event.php?action=add&date='+selDate }); } });
}); 

关于fancybox弹出层的应用,您可以参阅本站文章的相关介绍: Fancybox丰富的弹出层效果

event.php

Fancybox通过ajax调用了event.php中的内容。event.php通过获取参数,在弹出层中展示一个新建事件的表单,内容如下:

<div class="fancy"> <h3>新建事件</h3> <form id="add_form" action="do.php" method="post"> <input type="hidden" name="action" value="add"> <p>日程内容:<input type="text" class="input" name="event" id="event" style="width:320px" placeholder="记录你将要做的一件事..."></p> <p>开始时间:<input type="text" class="input datepicker" name="startdate" id="startdate" value="<?php echo $_GET['date'];?>"> <span id="sel_start" style="display:none"><select name="s_hour"> <option value="00">00</option> ...<!--省略多个option,下同--> </select>: <select name="s_minute"> <option value="00" selected>00</option> ... </select> </span> </p> <p id="p_endtime" style="display:none">结束时间:<input type="text" class="input datepicker"
name="enddate" id="enddate" value="<?php echo $_GET['date'];?>"> <span id="sel_end" style="display:none"><select name="e_hour"> <option value="00">00</option> ... </select>: <select name="e_minute"> <option value="00" selected>00</option> ... </select> </span> </p> <p> <label><input type="checkbox" value="1" id="isallday" name="isallday" checked> 全天</label> <label><input type="checkbox" value="1" id="isend" name="isend"> 结束时间</label> </p> <div class="sub_btn"><span class="del"><input type="button" class="btn btn_del" id="del_event" value="删除"></span> <input type="submit" class="btn btn_ok" value="确定"> <input type="button"
class="btn btn_cancel" value="取消" onClick="$.fancybox.close()"></div> </form>
</div> 

在弹出层中,我们要处理几个交互动作,一是点击日期输入框时调用jquery ui的datepicker日期选择器,二是选择“全天”和“结束时间”复选框时需要显示与隐藏的表单控件,最后是“确定”和“取消”按钮的操作。

首先我们要在event.php中载入jquery ui的样式以及ajax处理表单的插件:jquery.form.js。

<link rel="stylesheet" type="text/css" href="css/jquery-ui.css"<
<script type="text/javascript" src="js/jquery.form.min.js"></script> 

接着我们来处理调用日期选择器和选择“全天”及“结束时间”复选框时的动作。

$(function(){ $(".datepicker").datepicker();//调用日历选择器 $("#isallday").click(function(){//是否是全天事件 if($("#sel_start").css("display")=="none"){ $("#sel_start,#sel_end").show(); }else{ $("#sel_start,#sel_end").hide(); } }); $("#isend").click(function(){//是否有结束时间 if($("#p_endtime").css("display")=="none"){ $("#p_endtime").show(); }else{ $("#p_endtime").hide(); } $.fancybox.resize();//调整高度自适应 });
}); 

关于日历选择器的使用,本站文章:日期选择器:jquery datepicker的使用有相关介绍。而复选框勾选时,对应的表单内容进行显示与隐藏的操作,需要大家多试试,值得一提的是在勾选“结束时间”选项时,弹出层的高度会变化,这时可以调用$.fancybox.resize()来进行自动调整高度,否则在弹出层中会出现滚动条影响视觉效果。

弹出层的最后操作时提交表单,很显然,event.php表单代码中的action提交到了do.php来处理的。我们调用 jquery.form.js进行异步处理,提交表单时进行表单验证,这里的beforeSubmit调用回调函数showRequest(),然后就是 提交成功后,success回调函数showResponse()。关于jquery.form.js的使用,后面笔者会在helloweba中专门讲 解,敬请关注。

$(function(){ //提交表单 $('#add_form').ajaxForm({ beforeSubmit: showRequest, //表单验证 success: showResponse //成功返回 });
}); function showRequest(){ var events = $("#event").val(); if(events==''){ alert("请输入日程内容!"); $("#event").focus(); return false; }
} function showResponse(responseText, statusText, xhr, $form){ if(statusText=="success"){     if(responseText==1){ $.fancybox.close();//关闭弹出层 $('#calendar').fullCalendar('refetchEvents'); //重新获取所有事件数据 }else{ alert(responseText); } }else{ alert(statusText); }
} 

showResponse()根据接收状态,获取do.php返回的内容,如果成功(指插入数据成功),则关闭弹出层,并且通过fullcalendar的refetchEvents方法重新载入所有日历事件(局部刷新了日历区的内容),否则提示相关出错信息。

do.php

do.php用来处理表单提交,包括后面会讲解的修改和删除日历事件的操作。通过处理表单数据,然后将数据写入MySQL数据表中,并且返回执行结果。

include_once('connect.php');//连接数据库 $action = $_POST['action'];
if($action=='add'){ $events = stripslashes(trim($_POST['event']));//事件内容 $events=mysql_real_escape_string(strip_tags($events),$link); //过滤HTML标签,并转义特殊字符 $isallday = $_POST['isallday'];//是否是全天事件 $isend = $_POST['isend'];//是否有结束时间 $startdate = trim($_POST['startdate']);//开始日期 $enddate = trim($_POST['enddate']);//结束日期 $s_time = $_POST['s_hour'].':'.$_POST['s_minute'].':00';//开始时间 $e_time = $_POST['e_hour'].':'.$_POST['e_minute'].':00';//结束时间 if($isallday==1 && $isend==1){ $starttime = strtotime($startdate); $endtime = strtotime($enddate); }elseif($isallday==1 && $isend==""){ $starttime = strtotime($startdate); }elseif($isallday=="" && $isend==1){ $starttime = strtotime($startdate.' '.$s_time); $endtime = strtotime($enddate.' '.$e_time); }else{ $starttime = strtotime($startdate.' '.$s_time); } $colors = array("#360","#f30","#06c"); $key = array_rand($colors); $color = $colors[$key]; $isallday = $isallday?1:0; $query = mysql_query("insert into `calendar` (`title`,`starttime`,`endtime`,`allday`,`color`)  values ('$events','$starttime','$endtime','$isallday','$color')"); if(mysql_insert_id()>0){ echo '1'; }else{ echo '写入失败!'; }
} 

好了,本文简单介绍了在fullcalendar中创建日程事件的流程,代码比较多,而且调用了多个相关插件,一次性看下来真要有点信心,特奉上代 码包以供有需要的朋友下载后慢慢琢磨。接下来我们会介绍fullcalendar如何修改和删除日历事件,以及拖动保存日历事件等文 章,Helloweba感谢您的关注,顺祝:十一放假愉快!

来源于helloweba.com 》 FullCalendar应用——新建日程事件

FullCalendar 四:FullCalendar应用——新建日程事件相关推荐

  1. FullCalendar 五:FullCalendar应用——编辑与删除日程事件

    FullCalendar可以灵活运用到项目开发中,本站上一篇文章中,我们介绍了如何在FullCalendar新建日程事 件,今天我要给大家介绍的是如何在FullCalendar中编辑和删除日程事件,这 ...

  2. php日程 增删改查,使用Fullcalendar管理日程事件(增删改查拖放)

    新版Fullcalendar(v4)拥有丰富的选项方法事件配置以及插件应用,对开发者非常友好,开发者可以轻松的利用Fullcalendar定制一个完美的日程安排应用,本文将讲解最实际的日程事件管理前后 ...

  3. 使用FullCalendar做一个自己的日程管理(二)- 事件篇

    FullCalendar is a drag-n-drop jQuery plugin for displaying events on a full-sized calendar. 本文示例下载地址 ...

  4. FullCalendar在月视图中定义日程/事件显示结束时间

    目录 FullCalendar在月视图中定义日程/事件显示结束时间 配置 换行 FullCalendar在月视图中定义日程/事件显示结束时间 在默认条件下月视图中日程只显示开始时间如下图所示: 配置 ...

  5. 使用FullCalendar做一个自己的日程管理(一)- 基础篇

    FullCalendar is a drag-n-drop jQuery plugin for displaying events on a full-sized calendar. Github地址 ...

  6. “会议室使用情况”实现周日历和日程,可新建日程,鼠标悬浮显示当日日程

    直接上图: 使用的数据可通过请求后台拿到,数据格式有点复杂,取得中间的事件需要先获取横向会议室id,再获取纵向日期,两个维度对应上即可渲染,具体格式参考代码中的occupyInfo对象.       ...

  7. jQuery学习(四)— jQuery的ready事件和原生JS的load事件的区别

    jQuery学习(四)- jQuery的ready事件和原生JS的load事件的区别 jQuery的ready事件和原生JS的load事件的区别: 页面中可以有多个ready事件,而load事件会出现 ...

  8. android 添加日程失败,Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  9. Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

最新文章

  1. 波士顿动力送狗抗疫:头顶iPad,背装对讲机,说是减少医患接触,但性价比真的OK吗?...
  2. 学习和研究下unity3d的四元数 Quaternion
  3. C# 反序列化datetime的处理
  4. 【sklearn第十八讲】神经网络模型
  5. OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围...
  6. linux访问vdma的数据,Xilinx VDMA 24位流输出与32位AXI总线的内存流数据关系
  7. 计算机系统操作工 初级,计算机系统操作工国家职业标准
  8. vc++6.0常用插件和界面库
  9. c语言作业朱鸣华,C语言程序设计习题解析与上机指导 第3版
  10. 浅谈0-day漏洞的在野利用
  11. 025 京东网站案例
  12. Word教程_编程入门自学教程_菜鸟教程-免费教程分享
  13. 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解
  14. 实战:搭建高效率生鲜B2B平台八大模块及技术要求
  15. 【Windows Esp32】基于 libjpeg-9e 编解码库的视频播放器
  16. 用户即将一分钟后关闭计算机,Win10开机提示“你的电脑将在一分钟后自动重启”怎么办?...
  17. micropython是什么意思_MicroPython 是什么?
  18. C语言零基础入门:孙海洋-C语言程序设计-清华大学出版社
  19. Mathematics Subject Classification (MSC)
  20. 组策略2-桌面背景统一策略

热门文章

  1. Linux 简单文本处理命令
  2. 不重复地输出数(信息学奥赛一本通-T1245)
  3. 61 MM配置-后勤发票校验-发票冻结-设置容差限制
  4. minion java上传文件_Java程序员如何快速理解Kubernetes
  5. 大型程序是如何开发的_小程序开发好之后如何引流
  6. k8s修改node的ROLES标签
  7. linux内核那些事之early boot memory-memblock
  8. csdn2020年度博客之星 - 直播间(恭喜圆满结束)
  9. 360浏览器自定义切核功能
  10. 【如意影视】运营级+完整类库+解析线路+无限增加或删减解析接口+如意可视化播放器1.1