我实现了这个功能,但是控件里面的内容select不了我弹出的控件是<asp:Calendar>
下面附上代码: <asp:TextBox ID="SearchEDate" runat="server" CssClass="TextInput" ></asp:TextBox>
<asp:CompareValidator id="CompareValidator3" runat="server" ErrorMessage="<br>Please input the right type of date(YYYY-MM-DD)" Display="Dynamic"
ControlToValidate="SearchEDate" Operator="DataTypeCheck" Type=Date></asp:CompareValidator>
<asp:CompareValidator id="CompareValidator5" runat="server" ErrorMessage="<br>The end date must be greater than the starting date" Display="Dynamic"
ControlToCompare="SearchDate" ControlToValidate="SearchEDate" Operator=GreaterThan Type=Date></asp:CompareValidator>
<div id="Calendardiv" style="display:none; z-index:2; position:absolute">
<asp:Calendar ID="calEndDate" runat="server" OnSelectionChanged="calStartDate_SelectionChanged" OnDayRender="DayRender" BackColor="#FFFFCC" BorderColor="#FFCC66" BorderWidth="1px"
DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" ForeColor="#0000C0" Height="100px"
ShowGridLines="True" Width="150px">
<WeekendDayStyle BackColor="#fafad2" ForeColor="#ff0000" />
<SelectedDayStyle BackColor="#00ff00" />
<TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
<SelectorStyle BackColor="#FFCC66" />
<OtherMonthDayStyle ForeColor="#CC9966" />
<NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
<DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" />
<TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" />
</asp:Calendar>
</div> If Not IsPostBack Then
SearchEDate.Attributes.Add("onfocus", "javascript:document.getElementById('Calendardiv').style.display = ''")
SearchEDate.Attributes.Add("onblur", "javascript:document.getElementById('Calendardiv').style.display = 'none'")
end if Protected Sub calEndDate_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calEndDate.SelectionChanged
SearchEDate.Text = calEndDate.SelectedDate
calEndDate.Attributes.Add("Selected", "javascript:document.getElementById('Calendardiv').style.display = 'none'") End Sub
下面附上代码: <asp:TextBox ID="SearchEDate" runat="server" CssClass="TextInput" ></asp:TextBox>
<asp:CompareValidator id="CompareValidator3" runat="server" ErrorMessage="<br>Please input the right type of date(YYYY-MM-DD)" Display="Dynamic"
ControlToValidate="SearchEDate" Operator="DataTypeCheck" Type=Date></asp:CompareValidator>
<asp:CompareValidator id="CompareValidator5" runat="server" ErrorMessage="<br>The end date must be greater than the starting date" Display="Dynamic"
ControlToCompare="SearchDate" ControlToValidate="SearchEDate" Operator=GreaterThan Type=Date></asp:CompareValidator>
<div id="Calendardiv" style="display:none; z-index:2; position:absolute">
<asp:Calendar ID="calEndDate" runat="server" OnSelectionChanged="calStartDate_SelectionChanged" OnDayRender="DayRender" BackColor="#FFFFCC" BorderColor="#FFCC66" BorderWidth="1px"
DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" ForeColor="#0000C0" Height="100px"
ShowGridLines="True" Width="150px">
<WeekendDayStyle BackColor="#fafad2" ForeColor="#ff0000" />
<SelectedDayStyle BackColor="#00ff00" />
<TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
<SelectorStyle BackColor="#FFCC66" />
<OtherMonthDayStyle ForeColor="#CC9966" />
<NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
<DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" />
<TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" />
</asp:Calendar>
</div> If Not IsPostBack Then
SearchEDate.Attributes.Add("onfocus", "javascript:document.getElementById('Calendardiv').style.display = ''")
SearchEDate.Attributes.Add("onblur", "javascript:document.getElementById('Calendardiv').style.display = 'none'")
end if Protected Sub calEndDate_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calEndDate.SelectionChanged
SearchEDate.Text = calEndDate.SelectedDate
calEndDate.Attributes.Add("Selected", "javascript:document.getElementById('Calendardiv').style.display = 'none'") End Sub
{
//隐藏。
}提交后bShowCalendar 又会变成false
建议lz
日历控件的隐藏不要写在textbox失去焦点的事件里,感觉如果这样写,逻辑有矛盾了。
你可以在日期空间中写事件:选择日期后日期控件自动隐藏。
你在textbox旁边放一个按钮,当点击那个按钮时就把日历控件显示,
再在日历控件里面写个选中事件,
TextBox8.Text = Calendar1.SelectedDate.ToShortDateString();
Calendar1.Visible = false;
选择完后把他的值付给textbox,再把他隐藏,这样就可以了
第一个问题,你可以这样做,textbox和日历控件其中随便那一个获得焦点的时候就显示日历控件,只有两个都失去焦点的时候才影藏。第二个问题,postback的时候回重新加载页面,这里你可以使用ajax来异步回发,同样可以和服务端交换数据,但是不会刷新页面。
我是用VB.net来做的
他没有getfocus focused的属性啊,这该如何判断啊?而且就一个focus的属性就为控件设定focus。一个问题就算了,第二个问题的解决方法可以详细点吗?我AJAX异步回发怎么做呢?
第一点,我的说的失去焦点和获取焦点事件(Client事件)都可以写在html代码中,与用vb.net还是asp.net没有关系吧。第二点,不明白lz的意思是什么,是不会ajax还是没有思路?感觉这个只需要用到ajax的基本的东西就能实现了,如果对ajax不熟悉,lz可以上网翻一翻,学习下吧。
第一个问题:<asp:TextBox ID="SearchEDate" runat="server" CssClass="TextInput" onfocus="document.getElementById('divDate').style.display=block;" onblur="document.getElementById('divDate').style.display=none;" ></asp:TextBox>其中onfocus为获取焦点的client事件
onblur为失去焦点的client事件
'block'与'none'的属性不能省略