在我的表单中,我有一个文本框和一个日历以及其他控件
<asp:TextBox ID="TextBox2" runat="server" onfocus="CalOpen()" asp:TextBox>
<asp:Calendar ID="Calendar1" runat="server" style="display:none;"
onselectionchanged="Calendar1_SelectionChanged"></asp:Calendar>
<script type="text/javascript">
function CalOpen()
{
var cal = document.getElementById('<%=Calendar1.ClientID%>');
cal.style.display='block';
}
</script>
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox2.Text = Calendar1.SelectedDate.ToLongDateString();
Calendar1.Visible = false;
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Calendar1.Visible = true;
}
它第一次工作正常, 但是,第二次单击TextBox2时,即第一次选择日期后。 浏览器抛出错误“需要对象”
我无法知道我哪里出错了。
Plz帮助我使代码正确。
谢谢。
答案 0 :(得分:1)
在服务器端代码中编写Calendar1.Visible = false;
时,它根本不会呈现日历。因此,Javascript没有日历元素可供显示。
相反,您应该创建一个将display: none
应用于日历的CSS类,并将CssClass
属性设置为服务器上的该类。
例如:
<style type="text/css">
.Hidden {
display: none;
}
</style>
<asp:Calendar ID="Calendar1" runat="server" CssClass="Hidden"
onselectionchanged="Calendar1_SelectionChanged"></asp:Calendar>
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox2.Text = Calendar1.SelectedDate.ToLongDateString();
Calendar1.CssClass = "Hidden";
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Calendar1.CssClass = "";
}