Jquery textarea .val()意外返回undefined

时间:2015-03-11 20:18:53

标签: javascript jquery html undefined

下面的代码已经工作了几个星期,当我在jquery中使用选择器来获取textarea的值时,偶尔会开始返回'undefined',如下所示:

var text = escape($(this).find('textarea[id*=txtText]').val());

此控件在HTML中通过以下方式适当定义:

<asp:TextBox ID="txtText" runat="server" MaxLength="150" alt="150" TextMode="MultiLine"
     Rows="5" Columns="50" CssClass="customCss" ClientIDMode="Static" />

我之前通过在jquery中调用以下内容来访问文本:

var text = escape($("#txtText").val());

但是这也开始返回undefined,这就是为什么我把它改成了前面的例子。我很困惑为什么这个工作的一些实例,而其他人没有。作为一个多行文本框,jquery可能会因为任何

而将其声明为未定义
<br/>   

textarea中包含的字符?

非常感谢任何帮助或建议。

3 个答案:

答案 0 :(得分:1)

问题是您正在执行runat="server",这会使服务器更改ID。此新ID的示例可能类似于MainContent_txtText,您可以通过右键单击文本框并单击Inspect来检查元素来确定服务器正在更改ID的内容。

Chrome内置了开发人员工具,可让您进行检查。如果您不在Chrome中,Firefox也有Inspector,您也可以下载并使用Firebug。

你可以做一些事情来规避这个......

解决方案1 ​​

使用第一段中的Inspector方法确定新生成的ID,并通过该ID以与代码示例类似的方式访问它:

var text = escape($("#insert_id_from_inspector_here").val());

解决方案2

为控件提供一个类,并从该类元素中获取值:

var text = escape($(".txtText").val());

解决方案3

您还可以动态地将ID打印到您的javascript代码中:

var text = escape($("#<%= txtText.ClientID %>").val());

答案 1 :(得分:0)

这可能是你的asp:TextBox你已经指定了ClientIDMode的静态。

<asp:TextBox ID="txtText" runat="server" MaxLength="150" alt="150" TextMode="MultiLine"
 Rows="5" Columns="50" CssClass="customCss" **ClientIDMode="Static"** />

如果此控件包含在其他控件中,您最终会得到以下内容:

ListView1_ProductIDLabel_txtText

MSDN Details on ClientIDMode

  

静态ClientID值设置为ID属性的值。如果   控件是一个命名容器,控件用作顶部   为其包含的任何控件命名容器的层次结构。

使用Chrome开发工具查看DOM中的ID

答案 2 :(得分:0)

你可以做的一件事是......

var text = escape($(this).find('textarea[id*=<%=txtText.ClientID%>]').val());

性能差异可以忽略不计,即便如此我通常只是做一个视图源,发现w / e asp.net正在调用它并使用它。据我所知,上述方法是万无一失的。