请考虑以下示例:(Live demo here)
HTML:
<textarea></textarea>
<div id="button">Click Here</div>
CSS:
textarea {
height: 80px;
width: 150px;
background-color: #bbb;
resize: none;
border: none;
}
#button {
width: 150px;
background-color: #333;
color: #eee;
text-align: center;
}
JS:
$(function() {
var textarea = $("textarea");
textarea.val("Hello\nStack\nOverflow!\nThere\nAre\nLots\nOf\nGreat\nPeople\nHere");
$("#button").click(function() {
textarea.val(textarea.val() + "!");
});
textarea.scrollTop(9999).focus(); // Arbitrary big enough number to scroll to the bottom
});
点击#button
后,textarea
值会发生变化,由于某种原因,滚动条会显示在顶部(我在Firefox中检查了这一点,不确定其他浏览器)。
为什么会这样?
我该如何解决?
我找到了here一种可能的解决方案,但我想知道是否有其他解决方案。
答案 0 :(得分:9)
您可以保存scrollTop偏移量,设置值,并将scrollTop重置为旧偏移量:
var $textarea = ...;
var top = $textarea.scrollTop();
$textarea.val('foo');
$textarea.scrollTop(top);
答案 1 :(得分:1)
另一种解决方案(更难以暗示,因为没有独特的跨浏览器方式):
不是更改textarea的值,而是创建textarea内容的textRange并修改范围文本。