โซลูชั่น YET SIMPLE ที่สมบูรณ์แบบ
อัปเดต2020-05-14
(ปรับปรุงการรองรับเบราว์เซอร์สำหรับโทรศัพท์มือถือและแท็บเล็ต)
รหัสต่อไปนี้จะใช้งานได้:
- ในการป้อนข้อมูลที่สำคัญ
- ด้วยข้อความที่วาง(คลิกขวา & ctrl + v)
- ด้วยการตัดข้อความ(คลิกขวา & ctrl + x)
- ด้วยข้อความที่โหลดไว้ล่วงหน้า
- ด้วยความกว้างของเว็บไซต์textarea (หลายช่องข้อความ)
- ด้วยFirefox (ทดสอบ v31-67)
- ด้วยChrome (ทดสอบ v37-74)
- ด้วยIE (ทดสอบ v9-v11)
- ด้วยEdge (ทดสอบ v14-v18)
- ด้วยIOS ซาฟารี
- ด้วยAndroid เบราว์เซอร์
- ด้วย JavaScript โหมดเข้มงวด
- มีการตรวจสอบw3c
- และมีความคล่องตัวและมีประสิทธิภาพ
ตัวเลือก 1 (พร้อม jQuery)
ตัวเลือกนี้ต้องการjQueryและผ่านการทดสอบแล้วและใช้งานได้กับ1.7.2 - 3.3.1
ง่าย (เพิ่มรหัส jquery นี้ไปยังไฟล์สคริปต์หลักของคุณและลืมมัน)
$('textarea').each(function () {
this.setAttribute('style', 'height:' + (this.scrollHeight) + 'px;overflow-y:hidden;');
}).on('input', function () {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT.
This javascript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
ตัวเลือก 2 (JavaScript บริสุทธิ์)
ง่าย (เพิ่ม JavaScript นี้ลงในไฟล์สคริปต์หลักของคุณและลืมมัน)
const tx = document.getElementsByTagName('textarea');
for (let i = 0; i < tx.length; i++) {
tx[i].setAttribute('style', 'height:' + (tx[i].scrollHeight) + 'px;overflow-y:hidden;');
tx[i].addEventListener("input", OnInput, false);
}
function OnInput() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
ตัวเลือก 3 (นามสกุล jQuery)
มีประโยชน์ถ้าคุณต้องการใช้การผูกมัดเพิ่มเติมกับข้อความที่คุณต้องการให้มีขนาดอัตโนมัติ
jQuery.fn.extend({
autoHeight: function () {
function autoHeight_(element) {
return jQuery(element)
.css({ 'height': 'auto', 'overflow-y': 'hidden' })
.height(element.scrollHeight);
}
return this.each(function() {
autoHeight_(this).on('input', function() {
autoHeight_(this);
});
});
}
});
วิงวอนกับ $('textarea').autoHeight()
การอัปเดต TEXTAREA VIA JAVASCRIPT
เมื่อฉีดเนื้อหาลงใน textarea ผ่าน JavaScript ผนวกรหัสต่อไปนี้เพื่อเรียกใช้ฟังก์ชันในตัวเลือก 1
$('textarea').trigger('input');
ความสูง TEXTAREA PRESET
ในการแก้ไขความสูงเริ่มต้นของ textarea คุณจะต้องเพิ่มเงื่อนไขเพิ่มเติม:
const txHeight = 16;
const tx = document.getElementsByTagName("textarea");
for (let i = 0; i < tx.length; i++) {
if (tx[i].value == '') {
tx[i].setAttribute("style", "height:" + txHeight + "px;overflow-y:hidden;");
} else {
tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px;overflow-y:hidden;");
}
tx[i].addEventListener("input", OnInput, false);
}
function OnInput(e) {
this.style.height = "auto";
this.style.height = (this.scrollHeight) + "px";
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>