为了测试,我创建了一个按钮,单击该按钮将隐藏文本框。按下按钮的 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"/>
似乎每当我尝试修改服务器上运行的元素时,它都会导致回发。我的逻辑有问题还是这根本不可能?
最佳答案
如果您查看服务器控件生成的 ID,您会发现它与您设置的不同。您设置的 id 是代码隐藏 ID。当页面呈现时,该元素被分配其 ClientID
。这就是您遇到问题的原因。
你有两个选择:
设置
ClientIDMode
到“静态”。这会将元素的 id 保留为您设置的值。请确保仅当您只有一个具有此 ID 的元素时才执行此操作。否则你的 JavaScript 将会开始表现得很奇怪。动态设置 javascript 的 id。像这样:
document.getElementById('<% replyBox.ClientID %>');
这会将呈现的服务器控件的 ClientID 直接注入(inject)到 JavaScript 中。注意:只有当 javascript 位于 aspx 页面中时,这才有效。如果将 javascript 移至 js 文件,则此操作将不起作用。
关于javascript - JavaScript 函数可以修改 ASP.NET 服务器上运行的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223541/