Який підхід ви використовуєте, звичайно, залежить від вашої кінцевої мети. Якщо ви хочете надіслати результати за допомогою форми, тоді використання рідних елементів форми означає, що вам не потрібно використовувати сценарії для надсилання. Крім того, якщо сценарії вимкнено, тоді резервний варіант все одно працює без вигадливих ефектів зростання-зменшення. Якщо ви хочете , щоб отримати простий текст з contenteditable елемента ви завжди можете також використовувати сценарії , як node.textContent , щоб вирізати HTML , що браузери вставки в призначеному для користувача введення.
Ця версія використовує власні елементи форми з невеликими уточненнями деяких попередніх публікацій.
Це дозволяє зменшувати вміст.
Використовуйте це в поєднанні з CSS для кращого контролю.
<html>
<textarea></textarea>
<br>
<input type="text">
<style>
textarea {
width: 300px;
min-height: 100px;
}
input {
min-width: 300px;
}
<script>
document.querySelectorAll('input[type="text"]').forEach(function(node) {
var minWidth = parseInt(getComputedStyle(node).minWidth) || node.clientWidth;
node.style.overflowX = 'auto'; // 'hidden'
node.onchange = node.oninput = function() {
node.style.width = minWidth + 'px';
node.style.width = node.scrollWidth + 'px';
};
});
Ви можете використовувати щось подібне з елементами <textarea>
document.querySelectorAll('textarea').forEach(function(node) {
var minHeight = parseInt(getComputedStyle(node).minHeight) || node.clientHeight;
node.style.overflowY = 'auto';
node.onchange = node.oninput = function() {
node.style.height = minHeight + 'px';
node.style.height = node.scrollHeight + 'px';
};
});
Це не мерехтить у Chrome, результати можуть відрізнятися в інших браузерах, тому протестуйте.