def.showtarget == null && obj.after(picker);
picker.click(function(e) {
….//省略代码
});
picker的点击事件比较长,单独拿出来讲一下我想比较好,第一个要点是现实隐藏事件的处理,第二个是窗口边缘问题的处理,还有一个就是日期范围规则的处理。
function(e) {
//获取当前是否显示
var isshow = $(this).attr(“isshow”);
var me = $(this);
//如果显示着,则隐藏,用于处理点击一下picker显示,再点击picker隐藏的逻辑
if (cp.css(“visibility”) == “visible”) {
cp.css(” visibility”, “hidden”);
}
//同样是如果显示着
if (isshow == “1”) {
me.attr(“isshow”, “0”);
//remover临时数据,因为是单例所以要表示当前是哪个input
cp.removeData(“ctarget”).removeData(“cpk”).removeData(“indata”).removeData(“onReturn”);
return false; //阻止冒泡
}
//如果隐藏着,获取input的值
var v = obj.val();
if (v != “”) {
v = v.match(dateReg);//验证一下格式是否正确
}
if (v == null || v == “”) {//格式不正确或为空则用当前日期
def.Year = new Date().getFullYear();
def.Month = new Date().getMonth() + 1;
def.Day = new Date().getDate();
def.inputDate = null
}
else {
//否则使用input的日期
def.Year = parseInt(v[1], 10);
def.Month = parseInt(v[3], 10);
def.Day = parseInt(v[4], 10);
def.inputDate = new Date(def.Year, def.Month – 1, def.Day);
}
//注册临时数据
cp.data(“ctarget”, obj).data(“cpk”, me).data(“indata”, def.inputDate).data(“onReturn”, def.onReturn);
//调用规则,返回可选的日期范围
if (def.applyrule && $.isFunction(def.applyrule)) {
var rule = def.applyrule.call(obj, obj[0].id);
if (rule) {
if (rule.startdate) {
cp.data(“ads”, rule.startdate);
}
else {
cp.removeData(“ads”);
}
if (rule.enddate) {
cp.data(“ade”, rule.enddate);
}
else {
cp.removeData(“ade”);
}
}
}
else {
//不存在则删除限制
cp.removeData(“ads”).removeData(“ade”)
}
//画月日历内容td了
writecb();
$(“#BBIT-DP-T”).height(cp.height());
//获取显示依附的对象
var t = def.showtarget || obj;
//获取对象的位置
var pos = t.offset();
//获取对象的高度
var height = t.outerHeight();
//日期选择框的位置是依附对象的位置加上本身高度
var newpos = { left: pos.left, top: pos.top + height };
//以下都是处理窗口边界问题
var w = cp.width();
var h = cp.height();
var bw = document.documentElement.clientWidth;
var bh = document.documentElement.clientHeight;










