做法很簡單,我們先新增一default.aspx網頁,然後在網頁上放上一個TextBox及一個<img>,TextBox是讓使用者選擇完日期後,把日期放入TextBox之中,而<img>是顯示及隱藏Calendar控制項。
Default.aspx
<form id="form1" runat="server">
<div>
<asp:label associatedcontrolid="tbxDate" id="lblBirthday" runat="server" text="生日:">
<asp:textbox id="tbxDate" runat="server">
<img alt="選擇日期" id="ibnt" src="Calendar.png" />
</div>
<asp:calendar backcolor="White" bordercolor="#999999" cellpadding="4" daynameformat="Shortest" font-names="Verdana" font-size="8pt" forecolor="Black" height="180px" id="cal" runat="server" width="200px">
<selecteddaystyle backcolor="#666666" font-bold="True" forecolor="White">
<selectorstyle backcolor="#CCCCCC">
<weekenddaystyle backcolor="#FFFFCC">
<todaydaystyle backcolor="#CCCCCC" forecolor="Black">
<othermonthdaystyle forecolor="#808080">
<nextprevstyle verticalalign="Bottom">
<dayheaderstyle backcolor="#CCCCCC" font-bold="True" font-size="7pt">
<titlestyle backcolor="#999999" bordercolor="Black" font-bold="True"> </titlestyle></dayheaderstyle></nextprevstyle></othermonthdaystyle></todaydaystyle></weekenddaystyle></selectorstyle></selecteddaystyle></asp:calendar>
</form>
我們先在Defuault.asp.vb中處理ASP.NET的相關事件。
Defuault.asp.vb
Protected Sub cal_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles cal.DayRender
'生日不會大於今天,所以把大於今天的日期選取功能取消
If e.Day.Date > DateTime.Now Then
e.Day.IsSelectable = False
End If
End Sub
Protected Sub cal_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cal.SelectionChanged
Me.tbxDate.Text = Me.cal.SelectedDate.ToShortDateString
End Sub
最後就是處理Calendar顯示及隱藏的jQuery:
jQuery - position
$(function() {
//先隱藏Calendar
$("#cal").hide();
//<img>的click事件
$("#ibnt").click(function() {
var p = $("#ibnt");
//可使用position或offset來取得<img>的top及left座標
//var position = p.position();
//$("#cal").css({ "position": "relative", "top": position.top, "left": position.left });
var offset = p.offset();
//設定相對位置
$("#cal").css({ "position": "relative", "top": offset.top, "left": offset.left });
$("#cal").toggle();
});
//讓TextBox也能有<img>一樣的效果
$("#tbxDate").click(function() {
var p = $("#tbxDate");
var position = p.position();
$("#cal").css({ "position": "relative", "top": position.top, "left": position.left });
//var offset = p.offset();
//$("#cal").css({ "position": "relative", "top": offset.top, "left": offset.left });
$("#cal").toggle();
});
});
簡單吧,不過由於我們是使用ASP.NET的Calendar控制項,所以在點選時,會產生Postback,才有辦法把值寫入TextBox中,不像一般純JavaScript那樣單純,把值直接寫入TextBox中。控制項有控制項的好處,或許我們還能用CallBack來改寫,或使用Ajax實作來減少Postback,但我的重點是在jQuery,簡單又實用。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。