FullCalendar可以灵活运用到项目开发中,本站上一篇文章中,我们介绍了如何在FullCalendar新建日程事 件,今天我要给大家介绍的是如何在FullCalendar中编辑和删除日程事件,这样我们就完成了FullCalendar上的“增删改查”一系列操 作。

查看演示DEMO 下载源码

HTML

和上一篇文章FullCalendar应用——新建日程事件一样,HTML页面我们仍然使用cal_opt.html,这里HTML代码及相关js和css文件的载入就不再详述,如果您是第一次阅读本文,请先从FullCalendar系列文章第一篇看起。

jQuery

在日历视图中,我们通过单击需要编辑的日程事件项,调用fancybox弹出编辑层。FullCalendar提供了事件单击eventClick方法,请看代码:

$(function() { $('#calendar').fullCalendar({ //单击事件项时触发 eventClick: function(calEvent, jsEvent, view) { $.fancybox({ 'type':'ajax', 'href':'event.php?action=edit&id='+calEvent.id }); } });
}); 

单击事件项,调用了fancybox,和新建事件一样,采用ajax方式,通过传参,请求了编辑表单页面。

event.php

event.php根据请求过来的参数,读取对应id的日历事件,并将数据完整的现实在编辑表单中。我们将整个读取与显示编辑层的代码混编在 event.php中,当然实际开发中,你可能会使用zend、thinkphp等框架,让PHP和html模板分离。下面的代码我们将编辑模块写在了自 定义函数editform()中,那么event.php是根据传递的action参数来调用editform()的。

<?php
function editform($id){ $query = mysql_query("select * from calendar where id='$id'"); $row = mysql_fetch_array($query); if($row){ $id = $row['id']; $title = $row['title']; $starttime = $row['starttime']; $start_d = date("Y-m-d",$starttime); $start_h = date("H",$starttime); $start_m = date("i",$starttime); $endtime = $row['endtime']; if($endtime==0){ $end_d = $startdate; $end_chk = ''; $end_display = "style='display:none'"; }else{ $end_d = date("Y-m-d",$endtime); $end_h = date("H",$endtime); $end_m = date("i",$endtime); $end_chk = "checked"; $end_display = "style=''"; } $allday = $row['allday']; if($allday==1){ $display = "style='display:none'"; $allday_chk = "checked"; }else{ $display = "style=''"; $allday_chk = ''; } }
?>
<link rel="stylesheet" type="text/css" href="css/jquery-ui.css">
<div class="fancy"> <h3>编辑事件</h3> <form id="add_form" action="do.php?action=edit" method="post"> <input type="hidden" name="id" id="eventid" value="<?php echo $id;?>"> <p>日程内容:<input type="text" class="input" name="event" id="event" style="width:320px"
placeholder="记录你将要做的一件事..." value="<?php echo $title;?>"></p> <p>开始时间:<input type="text" class="input datepicker" name="startdate"
id="startdate" value="<?php echo $start_d;?>" readonly> <span id="sel_start" <?php echo $display;?>><select name="s_hour"> <option value="<?php echo $start_h;?>" selected><?php echo $start_h;?></option> <option value="00">00</option> ...//这里省略多个option,下同 </select>: <select name="s_minute"> <option value="<?php echo $start_m;?>" selected><?php echo $start_m;?></option> <option value="00">00</option> ... </select> </span> </p> <p id="p_endtime" <?php echo $end_display;?>>结束时间:<input type="text" class="input datepicker"
name="enddate" id="enddate" value="<?php echo $end_d;?>" readonly> <span id="sel_end"  <?php echo $display;?>><select name="e_hour"> <option value="<?php echo $end_h;?>" selected><?php echo $end_h;?></option> ... </select>: <select name="e_minute"> <option value="<?php echo $end_m;?>" selected><?php echo $end_m;?></option> ... </select> </span> </p> <p> <label><input type="checkbox" value="1" id="isallday" name="isallday" <?php echo $allday_chk;?>>
全天</label> <label><input type="checkbox" value="1" id="isend" name="isend" <?php echo $end_chk;?>> 结束时间</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>
<?php }?> 

关键是处理日期和时间的显示,当然这也不是本文重点,大家可以下载源码慢慢研究。

我们还需要加入代码处理表单提交和验证,和上文的新建事件一样,我们使用了jquery.form.js插件,代码也基本和新建事件一样。

$(function(){ $(".datepicker").datepicker({minDate: -3,maxDate: 3}); $("#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();//调整高度自适应 }); //提交表单 $('#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); }
} 

do.php

do.php用来处理新建、编辑和删除事件。编辑事件主要是通过接收表单post过来的数据,更新数据表中对应id的事件数据内容,如果更新成功就返回1,那么前端接收到更新成功的消息就会自动关闭fancybox层,并刷新日历视图。

include_once('connect.php');//连接数据库 $action = $_GET['action'];
if($action=='add'){ //新建事件
}elseif($action=="edit"){ //编辑事件 $id = intval($_POST['id']); if($id==0){ echo '事件不存在!'; exit;     } $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); $endtime = 0; }elseif($isallday=="" && $isend==1){ $starttime = strtotime($startdate.' '.$s_time); $endtime = strtotime($enddate.' '.$e_time); }else{ $starttime = strtotime($startdate.' '.$s_time); $endtime = 0; } $isallday = $isallday?1:0; mysql_query("update `calendar` set `title`='$events',`starttime`='$starttime',`endtime`='$endtime',
`allday`='$isallday' where `id`='$id'"); if(mysql_affected_rows()==1){ echo '1'; }else{ echo '出错了!';     }
}elseif($action=="del"){ //删除事件
}else{ } 

删除日程事件

在弹出的编辑表单层中,还有一个删除按钮,当我们点击删除按钮时,同样的发送ajax请求到do.php中,由do.php根据请求删除数据表中对应的日程记录,并返回成功的信息。

在event.php中还应该加上一段js:

$(function(){ ... //删除事件 $("#del_event").click(function(){ if(confirm("您确定要删除吗?")){ var eventid = $("#eventid").val(); $.post("do.php?action=del",{id:eventid},function(msg){ if(msg==1){//删除成功 $.fancybox.close(); $('#calendar').fullCalendar('refetchEvents'); //重新获取所有事件数据 }else{ alert(msg);     } }); } });
}); 

do.php也要加上删除操作。

...
}elseif($action=="del"){//删除 $id = intval($_POST['id']); if($id>0){ mysql_query("delete from `calendar` where `id`='$id'"); if(mysql_affected_rows()==1){ echo '1'; }else{ echo '出错了!';     } }else{ echo '事件不存在!'; }
} 

好了,本文介绍了编辑和删除fullCalendar日历事件,文中给出的代码不是连贯的,建议不要直接复制使用,您可以看明白了再测试,当然,如 果你够懒,可以下载本文提供的打包文件,包括读取、新建、编辑和删除日程事件功能。Hellwoeba.com感谢您的关注,接下来月光光会对 fullCalendar的最后一个操作:拖动及保存日程事件做讲解以及总结,敬请关注。

来源于helloweba.com 》 FullCalendar应用——编辑与删除日程事件

FullCalendar 五:FullCalendar应用——编辑与删除日程事件相关推荐

  1. Fullcalendar日历使用,包括视图选择、事件插入、编辑事件、事件状态更改、事件添加和删除、事件拖动调整,自定义头部,加入el-popover显示图片、图片预览、添加附件链接等,支持手机显示。

    Fullcalendar这个插件挺好,就是很多方法感觉官方文档也没怎么说,导致上手难度大,而且有些默认事件真的不太友好...废话不多说,先上效果图! 1.效果GIF 1.1 基本按钮功能 1.2  事 ...

  2. fullCalendar日历,点击添加日程,点击删除日程

    fullCalendar日历插件玩法解析 Fullcalendar安装 安装需要的npm包 npm install --save @fullcalendar/vue // 日历的周视图.日视图: np ...

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

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

  4. FullCalendar 四:FullCalendar应用——新建日程事件

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

  5. [Asp.net]Calendar+JqueryUi实现日程管理(右键菜单,添加,编辑,删除,源码)

    引言 出差终于回来了,这篇文章算是这个月的博客的开篇吧. 上篇文章:[Asp.net]Calendar+JqueryUi实现日程管理--添加日程 上篇文章主要贴了一些该项目的界面,这里面,将主要代码也 ...

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

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

  7. C# 实现对PPT插入、编辑、删除表格

    现代学习和办公当中,经常会接触到对表格的运用,像各种单据.报表.账户等等.在PPT演示文稿中同样不可避免的应用到各种数据表格.对于在PPT中插入表格,我发现了一个新方法,不过我用到了一款免费的.NET ...

  8. ASP.NET 2.0数据教程之三十六 在DataList里编辑和删除数据

    导言 概述插入.更新和删除数据 里我们已经学习了如何使用GridView等控件来插入,更新删除数据.通过ObjectDataSource和其它数据控件仅仅只需要在智能标签里勾一下checkbox就完成 ...

  9. Asp.net MVC2.0系列文章-编辑和删除新闻操作

    上一篇文章,我们简单地完成了新闻内容的展示功能(Asp.net MVC2.0系列文章-显示列表和详细页面操作),此篇文章,我们使用Asp.net MVC2.0实现新闻记录的编辑和删除功能. 创建Vie ...

最新文章

  1. 他山之石:Github的使用
  2. 查看MYSQL数据库中所有用户及拥有权限
  3. python如何读取excel数据-使用Python读取电子表格中的数据
  4. linux 查看端口被哪个程序占用
  5. ubuntu下设置开机自启动项
  6. WEBMIN管理Centos5.2 or RedHat5.2以上版本时samba用户不能同步系统帐户
  7. 网络Socket,ServerSocket
  8. C++:getenv setenv -- 获取设置系统环境变量
  9. html5 怎么实现展开文字,html5实现滚动文字
  10. 测试场景组件化轮子——用例元
  11. 大话云上“分布式实践”,理解 B、A、C 并不难!
  12. java string equal 与==的区别
  13. 诗意的边缘(PHP顶级框架Zend Fr
  14. pandas统计样本分位数
  15. eps格式图像空白边缘裁剪
  16. 李永乐复习全书线性代数 第三章 向量
  17. dns和私人dns是什么意思?企业如何预防dns劫持?
  18. 如何快速融入团队并成为团队核心(四)
  19. 龙腾世纪:起源–最后的古代墓碑和剑圣盔甲
  20. 华为OD机试真题 Java 实现【完美走位】【2022.11 Q4】

热门文章

  1. 连通块(信息学奥赛一本通-T1335)
  2. 求小数的某一位(信息学奥赛一本通-T1082)
  3. 信息学奥赛一本通C++语言——1122:计算鞍点
  4. 信息学奥赛C++语言:趣味整数4(水仙花数)
  5. 10 SD配置-企业结构-分配-给销售组织分配部门(Division)
  6. 数字电路实验怎么接线视频讲解_利达:气体灭火接线示意图
  7. OpenGL:如何从缓存中读取颜色、深度信息【转】
  8. 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境
  9. shuffle理解【增加模型的泛化能力】
  10. @RequestBody的与@RequestParam.