在javascript中使用复选框更改对象可见性
本文关键字:对象 可见性 复选框 javascript | 更新日期: 2023-09-27 18:11:25
我很抱歉,如果这个问题之前已经问过了,但我找不到它。
使用ASP。. net/c# web应用程序。
我在后面的代码创建一个标签,并将其添加到页面(所有编码在后面的代码,而不是在设计页)
现在我有一个复选框,我想改变标签的可见性取决于复选框是否被选中(显示)或如果没有(隐藏)。
我尝试使用更新面板。但是,由于标签是在代码中生成的,每次有部分回发时,我都必须再次生成它。我不希望那样。
是否有一种方法可以用javascript来避免回发?其他解决方案也值得赞赏。
非常感谢您的帮助
将此代码放入页面Load.
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)。
你做对了。您可以通过使用客户端脚本来避免使用UpdatePanel控件和AJAX调用的开销和复杂性。
你需要定义一个JavaScript函数来触发你的网页上的复选框的onClick事件:
<input type="checkbox" onclick="checkboxChanged(this);" />
我将假设您从代码后端向页面添加了一个ID为"lbl"的标签。确保使标签成为Page类的Protected成员,这样您就可以使用服务器标记从aspx页面访问它,以便在调用document时检索正确的ID。JavaScript中的getElementById。这很重要。
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';
}
}
<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
}
为什么不想在每次回发时加载标签控件呢?ASP。每次回发都会加载整个页面,并将视图状态重新加载到控件中。然后,您可以在页面初始化事件中每次创建标签控件,并且在这种情况下,它的viewstate可见属性将在回发之间保留。