Textarea位于ascx用户控件中,使用jQuery获取ite的值

时间:2013-03-07 16:05:24

标签: jquery asp.net textbox ascx

我有一个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控件有关。

2 个答案:

答案 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()