程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 改寫dhtmlxgrid的calender

改寫dhtmlxgrid的calender

編輯:關於JSP

作者:rautinee
email:[email protected] 關鍵字: UI dhtmlxgrid
dhtmlxgrid是我在javaeye上面發現的一個不錯的東東,並決定把dhtmlxgrid引入到我們的項目中來,但是在看calender部分的時候發現1.2 standard 版本的有問題,就是在選擇日期的時候,點擊翻月的小圖標,日期選擇界面會消失。但是1.0的pro版本沒有這個問題,我看了一下代碼,這應當與程序當中對detach的處理那塊有關,無奈dhtmlxgrid的代碼太長了,看的俺是頭昏眼花,腿抽筋,幾次亂改都未成功,只好想想看看有什麼旁門左道可以替代他的功能。

我原先項目中的日期選擇組件用的是popcalender.js,對他比較熟悉就從他下手,修改的方案如下:拋棄yahoo UI的calender組件,使用popcalender來替代,需要更改dhtmlxgrid_excell_calender.js和popcalender.js這兩個文件。在原先的代碼中,作者應該是通過調用detach來實現對cell的賦值的,但是calender有個特殊性,就是他需要翻月操作的,而據我觀察,在雙擊調用出日期選擇界面後,只要點擊鼠標,即調用detach,執行裡面的代碼,這就是為什麼點擊翻月按鈕,選擇界面會關閉,而且detach只會執行一次。我采用的解決方案是修改pop當中的closecalender函數,他是在用戶選擇日期的時候調用的,在他裡面對當前操作的cell進行賦值操作,這樣,問題就會迎刃而解了。

先看dhtmlxgrid_excell_calender.js

js 代碼
/*
Copyright Scand LLC http://www.scbr.com
This version of Software is free for using in GNU GPL applications. For other use or to get
Professional Edition please contact [email protected] to obtain license
*/

function eXcell_calendar(cell){
try{
this.cell = cell;
this.grid = this.cell.parentNode.grid;
}catch(er){}
this.edit = function(){
var arPos = this.grid.getPosition(this.cell);
popUpCalendar(this.cell, this.cell, "yyyy-mm-dd",-1,-1);
this.cell._cediton=true;
this.val=this.cell.val;

}
this.getValue = function(){
if(this.cell.val)return this.cell.val;
return this.cell.innerHTML.toString()._dhx_trim()
}


}
eXcell_calendar.prototype = new eXcell;
eXcell_calendar.prototype.setValue = function(val){


if(!val || val.toString()._dhx_trim()=="") val="";

this.cell.val=val.toString();
if(this.cell.val=="NaN"){
this.cell.val="";
this.cell.innerHTML=" ";

}
else if(this.cell.val=="")
{
this.cell.val="";
this.cell.innerHTML=" ";

}
else
{
this.cell.innerHTML = this.cell.val;
}

}

在popcalender當中主要是修改closeCalender這個函數,在他裡面添加一下兩段代碼:

js 代碼

//ctlToPlaceValue在這個地方就是grid當中的cell
ctlToPlaceValue.val = constructDate(dateSelected,monthSelected,yearSelected);
ctlToPlaceValue.innerHTML = ctlToPlaceValue.val;

還有就是在popUpCalendar函數中,在

crossobj.left = fixedX==-1 ? ctl.offsetLeft + leftpos : fixedX

前面加一句

js代碼

leftpos<0?leftpos=0:leftpos=leftpos;

ok,get it!

ie6和firefox1.5測試通過,修改後的代碼我打包了,希望能夠對使用dhtmlxgrid的朋友提供些幫助,例子可以看samples目錄下面的 復件 calendar_grid.html文件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved