Tất nhiên, bạn sử dụng cách tiếp cận nào phụ thuộc vào mục tiêu cuối cùng của bạn. Nếu bạn muốn gửi kết quả với một biểu mẫu thì việc sử dụng các phần tử biểu mẫu gốc có nghĩa là bạn không phải sử dụng tập lệnh để gửi. Ngoài ra, nếu kịch bản bị tắt thì dự phòng vẫn hoạt động mà không có các hiệu ứng thu nhỏ ưa thích. Nếu bạn muốn nhận được các văn bản đơn giản ra khỏi một contenteditable yếu tố bạn luôn có thể cũng sử dụng kịch bản như node.textContent để loại bỏ html mà các trình duyệt chèn vào đầu vào người dùng.
Phiên bản này sử dụng các phần tử biểu mẫu gốc với một số cải tiến nhỏ trên một số bài đăng trước đó.
Nó cũng cho phép thu nhỏ nội dung.
Sử dụng điều này kết hợp với CSS để kiểm soát tốt hơn.
<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';
};
});
Bạn có thể sử dụng thứ gì đó tương tự với các phần tử <textareosystem
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';
};
});
Điều này không nhấp nháy trên Chrome, kết quả có thể khác nhau trên các trình duyệt khác, vì vậy hãy kiểm tra.