谷歌日曆風格的日曆控件 一個基於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/,上面的插件都是我寫的,這個站點也是盜版者的網站,雖然是全英文可是確實國人的,哎 受不了。
農曆可做爲一類日程數據 在服務端生成 再在客戶端上顯示