我有一个asp.net主页,在其中加载了一个ascx控件。
在主页面上,我有一个声明为
的textarea元素<asp:TextBox ID="description" runat="server" Rows="8" Columns="35" TextMode="MultiLine" class="smth" title="A Title"></asp:TextBox>
呈现为
<textarea name="description" rows="8" cols="35" id="description" class="smth" title="A Title"></textarea>
在ascx控件上,我声明了一个类似的文本框
<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>
呈现相同的内容。
在主页面上,我可以使用
访问第一个文本框(包含在主页面)的内容$('#' + <%=description.ClientID %>).val()
但是我无法使用
访问ascx控件中包含的文本框的内容$('#descriptionMap').val()
但是,如果我将ascx文件中的文本框声明为
<textarea id="descriptionMap">some static content</textbox>
我可以访问它,但是如果我自己在文本框中写一些东西,那么没有任何反应。这让我疯了。有什么建议?我正在使用IE 8,这可能是问题吗?
编辑。一个简化的例子。这就是ascx控件的呈现方式:
<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>
<input type="submit" id="sendMap" value="Send" onclick="sendTest();" />
<script type="text/javascript">
function sendTest() {
alert(document.getElementById('descriptionMap').value);
}</script>
警告对话框显示为空。问题必须与以某种方式使用ascx控件有关。
答案 0 :(得分:1)
如果您使用服务器控件<asp:TextBox runat="server"...
或直接在ascx页面中创建html元素<textarea id="descriptionMap"...
,则有点不清楚。
如果您使用第一个选项(在ascx中创建服务器端控件),那么元素的最终ID将基于用户控件本身的ID。
例如,如果您已将主页中的用户控件添加为
<uc:MyTag runat="server" Id="MyControl01" />
然后,用户控件中的textarea的最终ID将为 MyControl01_descriptionMap
,您需要使用 $('#MyControl01_descriptionMap')
访问它(如果您正在使用.NET Framework 4及更高版本中的默认ClientIDMode。
但是如果你在ascx文件中直接创建一个html元素,那么你需要确保你的id是unquie,你可以使用相同的id来访问该控件。
答案 1 :(得分:0)
使用
$('#' + '<%= description.ClientID %>').val()
或
$('#<%= description.ClientID %>').val()