为了测试我创建一个按钮,单击时将隐藏文本框。按下按钮的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"/>
似乎每当我尝试修改在服务器上运行的元素时,它都会导致回发。我的逻辑是否有问题,或者这是不可能的?
答案 0 :(得分:2)
如果查看生成的服务器控件的id,您会发现它与您设置的不同。您正在设置的ID是代码隐藏ID。呈现页面时,会为元素分配ClientID
。这就是你遇到问题的原因。
您有两种选择:
将ClientIDMode
设置为“静态”。这将保持元素的id与您设置的完全相同。如果您只有一个具有此ID的元素,请务必仅执行此操作。否则你的javascript将开始奇怪地行动。
动态设置javascript的ID。像这样:
document.getElementById('<% replyBox.ClientID %>');
这会将呈现的服务器控件的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 %>');