2013-04-25 55 views
2

为了测试im创建一个按钮,当点击时将隐藏文本框。在按钮按下的JavaScript看起来像:javascript函数可以修改ASP.NET中服务器上运行的元素吗?

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

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

你有两个选择:

  1. 设置ClientIDMode为 “静态”。这会将元素的ID保留为您设置的元素的ID。确保只有这样才能做到这一点,如果你只有一个这个ID的元素。否则,你的JavaScript会开始表现奇怪。

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

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

这将注入渲染服务器控件的ClientID的直接进入的JavaScript。注意:这只有在javascript位于aspx页面时才有效。如果JavaScript被移动到一个js文件,这将无法正常工作。

+0

优秀它的工作。还有一些我不知道的信息谢谢你。 – 2013-04-25 20:53:10

+0

很高兴帮助。你实现了哪种方法? – 2013-04-25 22:07:46

+0

我用了一段时间的ClientIDMode,直到我意识到这会更好地包装箱子和其他东西与一个div标签,并将其全部隐藏起来。起初我应该走这条路线,但我不会再发现这些东西,但再次感谢。 – 2013-04-26 01:12:27

1

当您使用replyBox作为文本区域的标识与runat="server"属性这条线将你的情况

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

返回undefined。要么你需要使用ClientIdMode="Static"或引用的textarea的ClientId在你的函数类似这样的

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

喜欢这个答案,因为是告诉错误是什么。 – TryingToImprove 2013-04-25 20:06:03

相关问题