javascript函数可以修改ASP.NET中服务器上运行的元素吗?

时间:2013-04-25 19:51:02

标签: javascript asp.net

为了测试我创建一个按钮,单击时将隐藏文本框。按下按钮的javascript如下所示:

function showCommentBox() {
    var el = document.getElementById('replyBox');
    el.setAttribute("style", "display:none;");
    return false;
}

asp代码如下:

<textarea  id="replyBox" runat="server" class="replyBox"></textarea>
<asp:Button runat="server" id="replyBtn" onClientClick="return showCommentBox();" class="replyBtnClass" Font-Bold="true" Text="Reply"/>

似乎每当我尝试修改在服务器上运行的元素时,它都会导致回发。我的逻辑是否有问题,或者这是不可能的?

2 个答案:

答案 0 :(得分:2)

如果查看生成的服务器控件的id,您会发现它与您设置的不同。您正在设置的ID是代码隐藏ID。呈现页面时,会为元素分配ClientID。这就是你遇到问题的原因。

您有两种选择:

  1. ClientIDMode设置为“静态”。这将保持元素的id与您设置的完全相同。如果您只有一个具有此ID的元素,请务必仅执行此操作。否则你的javascript将开始奇怪地行动。

  2. 动态设置javascript的ID。像这样:

    document.getElementById('<% replyBox.ClientID %>');

  3. 这会将呈现的服务器控件的ClientID直接注入到javascript中。注意:这仅在javascript位于aspx页面中时才有效。如果javascript被移动到js文件,这将无效。

答案 1 :(得分:1)

此行将在您的案例中返回undefined

var el = document.getElementById('replyBox');

当您使用replyBox作为具有runat="server"属性的textarea的ID时。您需要使用ClientIdMode="Static"或在您的函数中引用textarea的ClientId

document.getElementById('<% replyBox.ClientID %>');