时间:2010-04-28 14:41:53

标签: javascript-events

在我的表单中,我有一个文本框和一个日历以及其他控件

<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帮助我使代码正确。

谢谢。

1 个答案:

答案 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 = "";
}