不是重复的问题;因此,请在假定之前仔细考虑内容。
我已经使用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>
我观察到,即使消除了“所有”更明显的原因,以下脚本在某些情况下仍将返回“未定义”。如 选择器不正确,页面上的ID超过1个,等等。
<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()方法有时会返回未定义的结果。
解决方案虽然很棒,但是却不理解为什么存在这个问题,实际上在智力上一无所获。
如果我需要更改标题的措辞,请告诉我。
答案 0 :(得分:3)
仅在<textarea>
上使用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>