下面的代码已经工作了几个星期,当我在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中包含的字符?
非常感谢任何帮助或建议。
答案 0 :(得分:1)
问题是您正在执行runat="server"
,这会使服务器更改ID。此新ID的示例可能类似于MainContent_txtText
,您可以通过右键单击文本框并单击Inspect
来检查元素来确定服务器正在更改ID的内容。
Chrome内置了开发人员工具,可让您进行检查。如果您不在Chrome中,Firefox也有Inspector,您也可以下载并使用Firebug。
你可以做一些事情来规避这个......
使用第一段中的Inspector方法确定新生成的ID,并通过该ID以与代码示例类似的方式访问它:
var text = escape($("#insert_id_from_inspector_here").val());
为控件提供一个类,并从该类元素中获取值:
var text = escape($(".txtText").val());
您还可以动态地将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
静态ClientID值设置为ID属性的值。如果 控件是一个命名容器,控件用作顶部 为其包含的任何控件命名容器的层次结构。
使用Chrome开发工具查看DOM中的ID
答案 2 :(得分:0)
你可以做的一件事是......
var text = escape($(this).find('textarea[id*=<%=txtText.ClientID%>]').val());
性能差异可以忽略不计,即便如此我通常只是做一个视图源,发现w / e asp.net正在调用它并使用它。据我所知,上述方法是万无一失的。