2

为了测试我创建了一个按钮,单击时将隐藏一个文本框。按下按钮的 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"/>

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

4

2 回答 2

2

如果您查看生成的服务器控件的 id,您会注意到它与您设置的不同。您设置的 id 是代码隐藏 ID。当页面被渲染时,元素被分配了它的ClientID. 这就是您遇到问题的原因。

你有两个选择:

  1. 设置ClientIDMode为“静态”。这会将元素的 id 保留为您设置的内容。确保仅当您只有一个具有此 ID 的元素时才执行此操作。否则,您的 javascript 将开始出现异常行为。

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

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

这会将呈现的服务器控件的 ClientID 直接注入 javascript。注意:这仅适用于 javascript 在 aspx 页面中。如果将 javascript 移动到 js 文件,这将不起作用。

于 2013-04-25T19:56:47.570 回答
1

在您的情况下,此行将返回 undefined

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

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

document.getElementById('<% replyBox.ClientID %>');
于 2013-04-25T19:58:43.483 回答