【发布时间】:2017-10-27 17:12:10
【问题描述】:
我正在尝试根据输入的文本自动扩展/缩小文本区域。 textarea 的指定高度为250px,并且可以在overfow: auto 使用滚动条进入之前自动扩展到450px。在文本区域中输入文本时它可以完美运行,但在粘贴大量文本时效果不佳。
在此处查看小提琴:https://jsfiddle.net/ynv6yta8/1/
还有一个sn-p:
// auto-expand/shrink text area
$('#mytextarea').bind('input propertychange paste', function() {
var oldHeight = parseInt($(this).height());
if (this.scrollHeight < 450) {
$(this).height(0).height(this.scrollHeight);
}
}).change();
#mytextarea {
height: 250px;
width: 450px;
min-height: 250px;
min-width: 450px;
resize: none;
overflow: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="mytextarea"></textarea>
我没有在小提琴中留下任何调试语句,但该事件确实在粘贴时被正确触发,但 this.scrollHeight 总是评估为 250px 附近的东西,即使粘贴的文本非常大。我猜this.scrollHeight 在paste 事件被触发时还没有更新?我该如何解决这个问题?
【问题讨论】:
-
我无法在 Chrome 61、Firefox 56 或 Safari 11 中重现该问题。
-
是的,您的猜测是正确的,粘贴在值实际更改之前触发。您可以在延迟函数中对文本区域进行更改,或者使用
input事件而不是您拥有的所有事件。请注意,propertychange(仅限 IE?)很容易导致无限循环。
标签: javascript jquery html css