0

。CS

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
        StringBuilder str = new StringBuilder();
        str.Append("<script language='javascript'>($('#phnoe').show();)</script>");
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "chp", str.ToString(), true);
    }

.aspx

<asp:CheckBox ID="ch_p" Text="phone" runat="server" AutoPostBack="true"
        oncheckedchanged="CheckBox1_CheckedChanged"/>
</div><div id="p" style="float:left;"><asp:TextBox style="float: left;" runat="server" id="phnoe" Visible="false"></asp:TextBox></div></div><br />

output - on checkedchanged //]]> 出现在页面顶部

4

1 回答 1

2

你应该改变这个

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "chp", str.ToString(), true);

ScriptManager.RegisterStartupScript(this, this.GetType(), "chp", str.ToString(), false);

ScriptManager.RegisterStartupScript 添加 javascript 代码,当所有 Dom 内容都呈现在 Page 上时。

由于您已经在字符串生成器中添加脚本标记,因此无需将 addScriptTag 参数设置为 true。

但是在您的 aspx 标记中,您使文本框可见 =“false”。

<asp:TextBox style="float: left;" runat="server" id="phnoe" Visible="false">
</asp:TextBox>

所以它不会呈现,您的脚本将无法显示它。

你应该改变你的标记

<asp:TextBox style="float: left;" runat="server" id="phnoe" style="display:none;">
</asp:TextBox>

因此,它可以在 Web 上呈现,但不会显示。因为我们将其显示设置为无。

如果您只想在复选框选中显示它,则无需将其设置为服务器端。你可以很容易地用jquery做到这一点。

所以你的标记应该

<div>
   <asp:CheckBox ID="ch_p" Text="phone" runat="server"  />
</div>
<div id="p" style="float:left;">
    <asp:TextBox style="float: left;" runat="server" id="phnoe" style="display:none">
    </asp:TextBox>
</div></div><br />

像使用 jquery 一样制作 Javascript 代码

$(function(){
      $('[ID$=ch_p]').on("click",function(){
           if(this.checked)
               $('[ID$=phnoe]').show();
           else 
               $('[ID$=phnoe]').hide();
      });
});

它将解决您的问题。

希望它会帮助你。

于 2012-09-20T12:46:07.150 回答