谷歌日历风格的日历控件 一个基于jQury的日历插件,能够帮助用户快速的建立日程(活动),相似谷歌日历 为啥叫xgcalendar? X=xuanye G=Google Calendar Likejavascript
在页面中插入html :html
<div id="xgcalendarp">这里是日历控件</div>
引入JS: 其中xgcalendar_lang_zh_CN.js为本地化文件,xgcalendar支持多语言java
<script src="static/js/plugin/xgcalendar_lang_zh_CN.js" type="text/javascript"></script> <script src="static/js/plugin/xgcalendar.js?v=1.2.0.4" type="text/javascript"></script>
调用 :jquery
var op = { view: "week", //默认视图,这里是周视图 theme:1,//默认的主题风格 autoload:true, //是否在页面加载完毕后自动获取当前视图时间的数据 showday: new Date(), //当前视图的显示时间 EditCmdhandler:edit, //点击的响应事件 //DeleteCmdhandler:dcal, //删除的响应事件 ViewCmdhandler:view, //查看的响应事件 onWeekOrMonthToDay:wtd,//当when weekview or month switch to dayview onBeforeRequestData: cal_beforerequest, onAfterRequestData: cal_afterrequest, onRequestDataError: cal_onerror, url: "/calendar/query" , //url for get event data by ajax request(post) quickAddUrl: "/calendar/add" , //url for quick add event data by ajax request(post) quickUpdateUrl: "/calendar/update" , //url for quick update event data by ajax request(post) quickDeleteUrl: "/calendar/delete" //url for quick delete event data by ajax request(post) }; var _MH = document.documentElement.clientHeight; //获取页面高度,不一样的文档类型须要不一样的计算方法,注意示例中使用的doctype 用这个就搞定了 op.height = _MH-70; //container height; op.eventItems =[]; //default event data; $("#xgcalendarp").bcalendar(op);
view
: 默认是周视图 day
,week
,month
weekstartday
: 默认星期一开始,即为1,若是设置为0则为从星期日开始theme
: 默认使用第一套主题,可设置范围0-21height
: 视图的高度,若是不设置则默认获取所在页面的高度url
: 必填 请求数据的UrleventItems
: 日程数据,是个数组,可经过此参数设置初始化数据method
: 异步提交数据的方式,默认为POST建议不要修改。showday
: 显示日期,默认为当天onBeforeRequestData
: 在异步调用调用开始以前执行的函数,能够用此参数配合下面的参数完成动态提示效果onAfterRequestData
: 异步调用完成以后onRequestDataError
: 在异步调用发生异常时onWeekOrMonthToDay
: 当周视图切换到日视图,由于在转换在内部完成,因此公开一个入口可获得该行为quickAddHandler
: 快速添加的拦截函数,该参数设置后quickAddUrl参数的设置将被忽略quickAddUrl
: 快速添加日程响应的 Url 地址quickUpdateUrl
: 拖拽更新时响应的 Url 地址quickDeleteUrl
: 快速删除日程时响应的Urk 地址autoload
: 自动使用url
参数加载数据,若是eventItems参数没有配置,可启用该参数,默认第一次获取数据readonly
: 是否只读,某些状况下,可设置整个视图只读extParam
: 额外参数数组{name:"",value:""},在因此异步请求中,都会附加的额外参数,可配置其余扩展的查询条件enableDrag
:默认为true,是否可拖拽,和 readonly
参数不一样的是 只是不能拖拽。timeFormat
:默认为HH:mm
, t表示上午下午标识,h 表示12小时制的小时,H表示24小时制的小时,m表示分钟tgtimeFormat
:"HH:mm" //同上eventItems
参数的数据格式,若是添加新的字段尽可能日后添加eventItems自己是个数组,数组的项自己又是个数组,结构以下所示 [主键,标题,开始时间,结束时间,是否全天日程,是否跨天日程,是否循环日程,颜色主题,是否有权限,地点,参与人] 对应的数据类型 [String,String,Date,Date,1/0,1/0,1/0,0-21,0/1,String,String]web
全部方法经过 $("#calendarid").functionName(params)
方式调用ajax
BCalSwtichview(viewtype)
切换视图 参数 viewtype
值为day
,week
,month
之一BCalReload
从新加载当前视图 即刷新BCalGoToday(day)
将时间回到day
参数所在的时间段,不切换视图BCalPrev
往前一个时间段,这个时间的范围由当前视图决定,如周视图即为往前一周BCalNext
同上 日后一个时间段BcalGetOp
获取当前参数,这个在切换视图的时候 会获取到某些文字提示,详见demoBcalSetOp(p)
设置参数,p
为额外的参数值 ,参考{p1:p1value}
,可动态设置参数onBeforeRequestData(type)
: type为数字,表示事件的类型(1:加载,2:新增,3:删除,4:更新)onAfterRequestData(type)
: type同上onRequestDataError(type,data)
:type同上,data为错误信息,若是存在的话onWeekOrMonthToDay(p)
: p为当前的参数值,可从p.dayshow 获取提示信息,详见demo####load时的参数说明
请求参数chrome
showdate=2013-1-9&viewtype=month&timezone=8数据库
其中showdate为当前日期,viewtype为当前视图,timezone为时区 后台会根据showdate和viewtype计算出对应的开始日期和结束日期,加上时区的偏移到数据库中检索 实际的状况应该根据你服务端编码实现的状况来处理,默承认经过request 的form中获取上述值json
请求返回数组
{"events":[],"issort":true,"start":"/Date(1261353600000)/","end":"/Date(1261958399000)/","error":null}
events
的结构同参数eventItems
的结构, issort
是否已在服务端排序(请在服务端作好排序), start
和end
是本次请求的开始时间和结束时间,这里是date的json表示法 error
是业务异常对象,可在服务端生成,结构为:{ErrorCode:””,ErrorMsg:””}
可在onRequestDataError
中捕获,并作友好的提示。
####更新时的参数说明 请求参数
calendarId=98&CalendarStartTime=2013-1-2+00%3A00&CalendarEndTime=2013-1-2+00%3A00&timezone=8
开始时间和结束时间的格式同你的多语言配置相关
请求返回
{"IsSuccess":true,"Msg":""}
是否成功和失败时的错误信息
删除和新增雷同 不作展开说了,若是不清楚能够经过工具看看,chrome 使用F12调出开发者工具,切换 Network选项卡,操做一边就能够看到。
##FAQ
有没有java版本的demo
没有,我知道不少网友 实现了若是有愿意提供的那很是欢迎
怎么把时间范围控制在8:00到下午18:00 (相似控制时间段)
展现不提供相似功能,如你愿意付费我能够考虑帮你实现。
弹出层中不能经过点击事件得到焦点,一样不能选中文字等等问题。
这个多是由于我禁用了 弹出层的mousedown事件的冒泡 ,新的输入框不能经过点击得到焦点 在代码中弹出层有以下一段代码。
buddle.mousedown(function(e) { return false })
$(document).one("mousedown", function(){})
主要是和这个事件冲突,你能够把上面的mousedown事件注释掉,而后在这个时间里面判断点击的位置是否在buddle中,能够经过判断pos,或者eventtarget 是buddle 子元素的方式
首先你要在弹出层的html中添加对应的input或者select标签
其次你在代码中必须对这个元素的取值赋值进行处理,并插入到post的请求参数中,还要存放到本地缓存中。 最后可能还要修改一些小瑕疵,根据你的测试状况,虽然我曾经帮别人实现过一次,可是时间过去的过久我已经记不得所有过程了。
xgcalendar是个开源项目,若是你把它使用到了你的商业项目中,我只要求你保留版权信息便可,不收取费用,固然你若是但愿定制化的开发,那我可能会收取一些费用,视功能复杂状况而定。
确实我也发现了,仍是一个法国人告诉个人,wdcalendar在很早的时候就盗版了xgcalendar ,也不能说彻底一字不改把,至少注释都改为英文了。我强烈鄙视这种行为,另外盗版了我一些其余的jquery插件号称是其做品。http://www.web-delicious.com/jquery-plugins/,上面的插件都是我写的,这个站点也是盗版者的网站,虽然是全英文可是确实国人的,哎 受不了。
农历可做为一类日程数据 在服务端生成 再在客户端上显示