为啥当代码有效时 JQuery .val() 方法有时会返回 undefined? [复制]

Posted

技术标签:

【中文标题】为啥当代码有效时 JQuery .val() 方法有时会返回 undefined? [复制]【英文标题】:Why does JQuery .val() method sometimes return undefined when code is valid? [duplicate]为什么当代码有效时 JQuery .val() 方法有时会返回 undefined? [复制] 【发布时间】:2018-12-28 20:45:55 【问题描述】:

不是重复的问题;所以在推定之前请仔细考虑内容。

我已经使用 JQuery 多年,以前从未见过这种行为。考虑以下几点:

<html>
   <div class="order-form-group">
      <label class="order-form-label" for="guestSpecialInstructions">Special Instructions:</label>
      <textarea class="order-form-textarea" id="guestSpecialInstructions" type="text"></textarea>
   </div>
   <div class="order-form-group">
     <label class="order-form-label" for="guestReason">Reason:</label>
     <textarea class="order-form-textarea" id="guestReason" type="text"></textarea>
   </div>
   <div class="button-container">
      <input class="order-form-submit" type="submit" value="Submit">
   </div>
</html>

我观察到以下脚本在某些情况下会返回“未定义”,即使“所有”更明显的原因已被消除。如 选择器不正确,页面上有超过 1 个 id 等等。

<script>
   var specInstr = $("#guestSpecialInstructions").val();
   var guestReason = $("#guestReason").val();
</script>

我花了好几个小时试图确定断开连接的原因;将我的代码剥离到最简单的基本级别,并且找不到任何合理的行为解释。

代码包含在一个简单的 HTML 页面中;没什么花哨的,引用 JQuery 存储库https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js

我有另一个在 aspx 页面中运行的项目,但标记仍然相同,并且 .val() 方法可以正常工作。

碰壁数小时后,我在JQuery: .val() is not working for textarea 看到了帖子,其他人使用有效代码证明了完全相同的问题,建议是:

<script>
    var specInstr = $("#guestSpecialInstructions")[0].value;
    var guestReason = $("#guestReason")[0].value;
</script>

然后问题就自动解决了。我唯一的问题是似乎没有人回答为什么当代码的所有方面都有效时 JQuery .text() 方法有时会返回 undefined 的问题。

解决方案很棒,但不了解问题存在的原因,在智力上真的一无所获。

如果我需要更改标题的措辞,请告诉我。

【问题讨论】:

如果代码位于相关 HTML 之前,则 jQuery 选择器将找不到它。 .val() 在所有情况下都适用于 &lt;textarea&gt; 元素。 .val().text() 方法做的事情完全不同。 输入/文本区域应该使用.val() 而不是.text() 你需要把你的jQuery代码放到ready()块中 多年来一直在 textareas 上使用val(),从未出现过一个问题 @Mark 完全错误。 【参考方案1】:

您只能在 &lt;textarea&gt; 上使用 text(),前提是它已预先填充并返回原始内容

用户对内容的任何更改或以编程方式设置新值都不会改变 text() 返回的内容,因为它将始终是原始的预填充内容

始终使用val() 获取和设置

var $txt = $('textarea')

console.log('text() Original content:', $txt.text())
console.log('val() Original content:', $txt.val())

$txt.val( 'Some new content')

console.log('text() after value change:', $txt.text())
console.log('val() after value change:', $txt.val())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="one" type="text">
  Original text
</textarea>

【讨论】:

以上是关于为啥当代码有效时 JQuery .val() 方法有时会返回 undefined? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

read和onload jquery.val

为啥我用jquery 写 cookie总是undefined

关于jquery中使用.val(),取不到值。为啥啊!

为啥当我添加一个选择选项来选择表单字段时不会更改为有效?

当表单提供有效的输入数据时,为啥我的表单按钮没有打开? (包括代码沙箱)

为啥jquery的append添加不了元素