使用复选框使用javascript更改对象可见性?

时间:2011-10-13 22:10:34

标签: c# javascript asp.net checkbox visibility

如果之前已经问过这个问题,我真的很抱歉,但我找不到它。

使用ASP.NET / C#Web应用程序。

我正在后面的代码中创建一个标签并将其添加到页面中(所有代码都在代码中编码,而不是在设计页面中)

现在我有一个复选框我希望更改标签的可见性,具体取决于复选框是选中(显示)还是不选中(隐藏)。

我尝试使用更新面板。但由于标签是在代码中生成的,因此每次有部分回发时都必须再次生成标签。我不希望这样。

有没有办法用javascript来避免回复?其他解决方案也很受欢迎。

非常感谢您的帮助

4 个答案:

答案 0 :(得分:5)

将此代码放入页面加载。

if (!Page.IsPostBack) {
    Label lbl = new Label();
    lbl.ID = "lbl";
    lbl.Text = "Test";
    this.Controls.Add(lbl); 

添加对jQuery javascript的引用,并将其作为HTML放在下面。

<asp:CheckBox runat="server" ID="chk" />
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $("#chk").change(function () {
            if (this.checked)
                $("#lbl").hide();
            else
                $("#lbl").show();
        });
    });
</script>

尝试使用AJAX(jQuery)以防需要创建动态控件。

答案 1 :(得分:3)

你走在正确的轨道上。您可以通过使用客户端脚本来避免使用UpdatePanel控件和AJAX调用的开销和复杂性。

您需要为网页上的复选框的onClick事件定义要触发的JavaScript函数:

<input type="checkbox" onclick="checkboxChanged(this);" />

我假设您要从代码隐藏处向页面添加ID为“lbl”的标签。确保将标签设置为Page类的受保护成员,以便您可以使用服务器标签从aspx页面访问它,以便在JavaScript中调用document.getElementById时检索正确的ID。这很重要。

Partial Class MyPage
  Inherits System.Web.UI.Page
  Protected lbl As Label

  Private Sub Page_Load(sender As Object, e As EventArgs)

    If Not Page.IsPostback Then

      lbl = New Label()
      lbl.ID = "lbl"
      Me.Controls.Add(lbl)

    End If

  End Sub

End Class

因此,您的aspx页面上的JavaScript代码将如下所示:

function checkboxChanged(checkbox) {
  if (checkbox.checked) {
    document.getElementById("<%=Me.lbl.ClientID %>").style.display = 'inline';
  } else {
    document.getElementById("<%=Me.lbl.ClientID %>").style.display = 'none';
  }
}

答案 2 :(得分:1)

<asp:CheckBox ID="CheckBox1" onclick='$("span[id$=lblToHide]").toggle();' runat="server" Text="Bla" AutoPostBack="false" />   

if (!Page.IsPostBack) {
    Label lbl = new Label();
    lbl.ID = "lblToHide";       
    lbl.Text = "I am visible";
    lbl.Attributes.Add("style", "display:none"); //hide at first
    this.Controls.Add(lbl); //or however you are adding it
}

答案 3 :(得分:0)

为什么不想在每次回发时加载标签控件?使用ASP.NET,整个页面将加载EACH回发,并将视图状态重新加载到控件中。然后你可以在页面init事件每次创建标签控件,它的viewstate可见属性在这种情况下将保留在回发之间。