推薦相容 IE、 FireFox 的 javascript 日曆控制項
原創作者:寒羽楓(cityhunter172)
一、簡介與聲明
此日曆控制項是 CSDN 網友 KimSoft 的作品:http://blog.csdn.net/kimsoft/archive/2006/05/24/753225.aspx 。介面清爽,純指令碼運行,實現了日期的回顯功能,最重要的是相容 FireFox 。
為了適應更多需求,我針對該控制項作了以下修改:
1、返回日期的輸出格式,我改成了由使用者以參數形式指定 Style
2、關於 IE 中 <select> 下拉框的處理,不調用隱藏,而是用<iframe>直接覆蓋
3、不使用 //this.panel.style.visibility = "hidden"; 因為它在 FireFox 中會掩蓋之前出現過地方下面的連結文字,而是改用 this.panel.style.display = "none";
4、新增失去焦點後,整個 WebCalendar 即隱藏
此控制項著作權歸屬於 KimSoft ,大家在使用過程中請勿刪除文中的著作權聲明,謝謝。再次感謝 KimSoft 的開源。
二、修改後的代碼
以下是 WebCalendar.js 修改後的源碼
<!--
var cal;
var isFocus = false ; // 是否為焦點
// 以上為 寒羽楓 2006-06-25 添加的變數
// 選擇日期 → 由 寒羽楓 2006-06-25 添加
function SelectDate(obj,strFormat)
... {
var date = new Date();
var by = date.getFullYear()-50; //最小值 → 50 年前
var ey = date.getFullYear()+50; //最大值 → 50 年後
cal = new Calendar(by, ey, 1,strFormat); //初始化英文版
cal.show(obj);
}
/**/ /**
* 返回日期
* @param d the delimiter
* @param p the pattern of your date
2006-06-25 由 寒羽楓 修改為根據使用者指定的 style 來確定;
*/
// String.prototype.toDate = function(x, p) {
String.prototype.toDate = function (style) ... {
/**//*
if(x == null) x = "-";
if(p == null) p = "ymd";
var a = this.split(x);
var y = parseInt(a[p.indexOf("y")]);
//remember to change this next century ;)
if(y.toString().length <= 2) y += 2000;
if(isNaN(y)) y = new Date().getFullYear();
var m = parseInt(a[p.indexOf("m")]) - 1;
var d = parseInt(a[p.indexOf("d")]);
if(isNaN(d)) d = 1;
return new Date(y, m, d);
*/
var y = this.substring(style.indexOf('y'),style.lastIndexOf('y')+1);//年
var m = this.substring(style.indexOf('M'),style.lastIndexOf('M')+1);//月
var d = this.substring(style.indexOf('d'),style.lastIndexOf('d')+1);//日
if(isNaN(y)) y = new Date().getFullYear();
if(isNaN(m)) m = new Date().getMonth();
if(isNaN(d)) d = new Date().getDate();
var dt ;
eval ("dt = new Date('"+ y+"', '"+(m-1)+"','"+ d +"')");
return dt;
}
/**/ /**
* 格式化日期
* @param d the delimiter
* @param p the pattern of your date
* @author meizz
*/
Date.prototype.format = function (style) ... {