精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>★JSP的特效★>>HTML日历

主题:HTML日历
发信人: dongbao()
整理人: dongbao(2000-09-17 18:05:30), 站内信件
目前在动态网页上使用时间已经是一个必须,但由于时间具有很多的特殊性,所
以判断和录入都很麻烦,其中可能包括的问题有:时间的有效性检测、有效时间
范围的检测、输入界面的美观等等(这个程序都可以解决),如果我们自己来做
这个工作将花费很多时间,并且没有效率。所以我把我做的一个用div做的日历给
大家,希望大家可以利用这个用javascript写的程序来完善自己的程序。但别忘
了是Adong无偿提供的::-)嘻嘻(本程序编写和调试时间为1.5天包括写这篇文章
,如果大家在使用过程中发现有什么问题请写信给我mailto:lidong.zhang@263.
net),下面就是我的程序,我就不做具体介绍了,自己体会吧:(本程序不能在n
etscape上运行,但稍做改动就可以实现,需要的话大家可以自己动手做。:-))


cele_date.js

/*
本程序由Adong制作 2000年8月22日 mailto:[email protected]
*/
//有效的时间范围 
var date_start,date_end,g_object  
var disble_ground=new Image;
var a1=new Image;
var a2=new Image;
a1.src="a1.gif";
a2.src="a2.gif";
disble_ground.src="bg.gif";
  //mode :时间变换的类型0-年 1-月 2-直接选择月
function change_date(temp,mode)
{var t_month,t_year
    if (mode){
        if(mode==1)
        t_month=parseInt(cele_date_month.value,10)+parseInt(temp,10);

        else
        t_month=parseInt(temp)
        if (t_month<cele_date_month.options(0).text) {
cele_date_month.value=cele_date_month.options(cele_date_mo
nth.length-1).text;
change_date(parseInt(cele_date_year.value,10)-1,0);
}
else{
if (t_month>cele_date_month.options(cele_date_month.length
-1).text){
                cele_date_month.value=cele_date_month.options(0).text;

                change_date(parseInt(cele_date_year.value,10)+1,0);
                }            
            else
                {cele_date_month.value=t_month;
                 set_cele_date(cele_date_year.value,cele_date_month.va
lue);                
                }
        }
    }  
    else{
        t_year=parseInt(temp,10);
        
        if (t_year<cele_date_year.options(0).text) {
cele_date_year.value=cele_date_year.options(0).text;
set_cele_date(cele_date_year.value,1);
}
else{
if (parseInt(t_year,10)>parseInt(cele_date_year.options(ce
le_date_year.length-1).text,10)){
                cele_date_year.value=cele_date_year.options(cele_date_
year.length-1).text;
                set_cele_date(cele_date_year.value,12);               
 
                }            
            else
                {cele_date_year.value=t_year;
                 set_cele_date(cele_date_year.value,cele_date_month.va
lue);                
                }
        }
    }
}

//初始化日历
function init(d_start,d_end)
{
      var temp_str;
     var i=0
     var j=0
     date_start=new Date(2000,7,1)
     date_end=new Date(2004,8,1)
     
     //必须要有内容(奇怪)
     document.writeln("<div name=\"cele_date\" id=\"cele_date\" style
=\"display:none\" style=\"LEFT: 69px; POSITION: absolute; TOP: 159p
x\" onClick=\"event.cancelBubble=true;\" >&nbsp; </div>");
     
     
     window.cele_date.innerHTML="";
     temp_str="<table border=1><tr><td colspan=7>";
     temp_str+="<img id=s_a1 name=s_a1 src=\"a1.gif\" language=\"javas
cript\" onclick=\"change_date(-1,1)\" >";//左面的箭头
     temp_str+=""//年
     temp_str+="<select name=\"cele_date_year\" id=\"cele_date_year\"
language=\"javascript\" onchange=\"change_date(this.value,0)\">"
     for (i=2000;i<=2005;i++)
{
temp_str+="<OPTION value=\""+i.toString()+"\">"+i.toString()+"</O
PTION>";
     }
     temp_str+="</select>&nbsp;";
     temp_str+=""//月
     temp_str+="<select name=\"cele_date_month\" id=\"cele_date_month\
" language=\"javascript\" onchange=\"change_date(this.value,2)\" >"
     for (i=1;i<=12;i++)
{
temp_str+="<OPTION value=\""+i.toString()+"\">"+i.toString()+"</O
PTION>";
     }
     temp_str+="</select>&nbsp;";
     temp_str+=""//右箭头
     temp_str+="<img id=s_a2 name=s_a2 src=\"a2.gif\" language=\"javas
cript\" onclick=\"change_date(1,1)\" >";
     temp_str+="</td></tr><tr><td>"
     temp_str+="Su</td><td>";temp_str+="Mo</td><td>"; temp_str+="Tu</t
d><td>"; temp_str+="We</td><td>"
     temp_str+="Th</td><td>";temp_str+="Fr</td><td>"; temp_str+="Sa</t
d></tr>";
     for (i=1 ;i<=6 ;i++)
{
temp_str+="<tr>";
        for(j=1;j<=7;j++){
temp_str+="<td name=\"c"+i+"_"+j+"\"id=\"c"+i+"_"+j+"\" st
yle=\"CURSOR: hand\" language=\"javascript\" onclick=\"td_click(this)
\">&nbsp;</td>"
            }
     temp_str+="</tr>"        
     }
     temp_str+="</td></tr></table>";
     window.cele_date.innerHTML=temp_str;
     document.all("s_a1").src=a1.src
     document.all("s_a2").src=a2.src
}
function set_cele_date(year,month)
{
   var i,j,p,k
   var nd=new Date(year,month-1,1);
   event.cancelBubble=true;
   cele_date_year.value=year;
   cele_date_month.value=month;   
   k=nd.getDay()-1
   for (i=1;i<=6;i++)
for(j=1;j<=7;j++)
{
eval("c"+i+"_"+j+".innerHTML=\"\"");
eval("c"+i+"_"+j+".bgColor=\"white\"");
eval("c"+i+"_"+j+".style.cursor=\"hand\"");
}
while(month-1==nd.getMonth())
{ j=(nd.getDay() +1);
p=parseInt((nd.getDate()+k) / 7)+1;
eval("c"+p+"_"+j+".innerHTML="+"\""+nd.getDate()+"\"");


if (nd>date_end || nd<date_start)
{
eval("c"+p+"_"+j+".style.backgroundImage.src=disble_ground.src")
;
eval("c"+p+"_"+j+".bgColor=\"DarkGray\"");
eval("c"+p+"_"+j+".style.cursor=\"text\"");
}
nd=new Date(nd.valueOf() + 86400000)
}
}

//s_object:点击的对象;d_start-d_end有效的时间区段;需要存放值的控件;

function show_cele_date(eP,d_start,d_end,t_object)
{
var s,cur_d
var eT = eP.offsetTop;
var eH = eP.offsetHeight;
var dH = window.cele_date.style.pixelHeight;
var sT = document.body.scrollTop;
event.cancelBubble=true;
window.cele_date.style.left = eP.offsetLeft;

if(eT-dH >= sT && eT+eH+dH > document.body.clientHeight+sT)
window.cele_date.style.top = eT-dH;  
else window.cele_date.style.top = eT+eH;  

s=d_start.split("-")
date_start=new Date(s[0],s[1]-1,s[2])

s=d_end.split("-")
date_end=new Date(s[0],s[1]-1,s[2])
g_object=t_object

cur_d=new Date()
set_cele_date(cur_d.getYear(),cur_d.getMonth()+1);
window.cele_date.style.display="block";
}
function td_click(t_object)
{
var t_d
if (parseInt(t_object.innerHTML,10)>=1 && parseInt(t_object.innerHTML,
10)<=31 )
{ t_d=new Date(cele_date_year.value,cele_date_month.value-1,t_object.i
nnerHTML)

if (t_d<=date_end && t_d>=date_start)
{g_object.value=cele_date_year.value+"-"+cele_date_month.value+"-"+t_o
bject.innerHTML
window.cele_date.style.display="none";}
}

}
function h_cele_date()
{
window.cele_date.style.display="none";
}


HTML文件如下:

<html>
<head>
<title>cele date</title>
<script language="javascript" src="cele_date.js">

</script>
</head>
<body onclick="h_cele_date()">
<script language="javascript">
init();
</script>

<INPUT id=text1 name=text1 style="CURSOR: text" >

<INPUT type="button" value="select date" id=button1 name=button1 langu
age="javascript" onclick="show_cele_date(button1,'2001-1-1','2004-1-1'
,text1)">
</body>
</html>



--
明知道爱你不会有结果 为何还如此执著
为你付出所有 你竟不顾一切就走
明知道爱你只是继续错 为何还如此脆弱
已经习惯有你 已经不能將你摆脱
也许当一场梦 梦醒一切都随风

※ 来源:.月光程序代码网 http://www.moon-soft.com.[FROM: 211.101.144.65]

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]