【发布时间】:2022-01-01 20:32:03
【问题描述】:
我正在尝试实现一个简单的脚本来管理调整文本区域的大小以适应内容。添加内容时效果很好,但每次我按退格键时,滚动高度值都会增加 3px!
document.querySelectorAll('textarea').forEach( element => {
element.style.height = `${element.scrollHeight}px`
element.addEventListener('input', event => {
event.target.style.height = `${event.target.scrollHeight}px`
})
})
/* style.css */
main, header {
max-width: 600px;
margin: auto;
}
textarea {
font-family: 'Times New Roman', Times, serif;
font-size: 1em;
border-style: hidden;
outline: none;
padding: 0.1em;
margin: none;
resize: none;
width: 80%;
border-radius: 0.2em;
border: 1px solid #EEE;
}
textarea:focus {
border: 1px solid #DDD;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf8" />
<meta name="viewport" content="width=device-width", initial-scale="1.0" />
<title>Resizing Text Area</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="module" src="./script.js" defer></script>
</head>
<body>
<header>
<h1>Resizing Text Area</h1>
</header>
<main>
<p><textarea class="data p" id="article"></textarea></p>
</main>
</body>
</html>
有人知道这种烦人行为的原因吗?
【问题讨论】:
-
能否包含 CSS 以便对其进行测试?我注意到,在尝试使用您的代码时,即使没有创建滚动条,文本框也会在每次击键时调整大小。这是有意的还是应该只在内容增长到创建滚动条时才进行大小调整?
-
CSS 与问题无关,我不应该包含链接,但我会在此处添加。每当内容更改时,代码都会检查,但我愿意接受任何建议。
-
你在什么浏览器上运行这个?我在 Chrome 上,它似乎有奇怪的行为。在我看来,textarea 的高度是从单个字符按下增加的。我怀疑您使用退格键看到的任何行为都可能是特定于浏览器的。
-
这个问题最初是在 Safari 中发现的,但是我在 Chrome 中得到了相同的行为。
-
"退格增加滚动高度的值" False.任何键都可以。
标签: javascript html dom