จากคำตอบของ Michael ฉันได้สร้างเวอร์ชันของตัวเองโดยใช้ jQuery ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดที่สั้นกว่าและน่าจะทำให้งานเสร็จได้
ฉันกำลังทำสิ่งเดียวกันกับคนส่วนใหญ่ที่นี่โดยใช้ระยะเวลาในการเขียนข้อความอินพุตแล้วเพิ่มความกว้าง จากนั้นฉันจะตั้งค่าความกว้างเมื่อการกระทำkeyup
และblur
ถูกเรียก
นี่คือcodepen ที่ใช้งานได้ codepen นี้แสดงให้เห็นถึงวิธีการนี้สามารถใช้กับหลาย ๆ อินพุตฟิลด์
โครงสร้าง HTML:
<input type="text" class="plain-field" placeholder="Full Name">
<span style="display: none;"></span>
jQuery:
function resizeInputs($text) {
var text = $text.val().replace(/\s+/g, ' '),
placeholder = $text.attr('placeholder'),
span = $text.next('span');
span.text(placeholder);
var width = span.width();
if(text !== '') {
span.text(text);
var width = span.width();
}
$text.css('width', width + 5);
};
ฟังก์ชั่นด้านบนรับค่าอินพุตตัดขอบช่องว่างพิเศษและตั้งค่าข้อความเป็นส่วนขยายเพื่อให้ได้ความกว้าง หากไม่มีข้อความจะได้รับตัวยึดตำแหน่งแทนและป้อนเข้าไปในช่วงแทน เมื่อมันเข้าสู่ข้อความในช่วงมันก็จะตั้งค่าความกว้างของอินพุต + 5
บนความกว้างเป็นเพราะไม่มีการป้อนข้อมูลที่ได้รับการตัดเล็กน้อยในขอบเบราว์เซอร์
$('.plain-field').each(function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('keyup blur', function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('blur', function() {
var $text = $(this).val().replace(/\s+/g, ' ');
$(this).val($text);
});
หากสามารถปรับปรุงได้โปรดแจ้งให้เราทราบเพราะนี่เป็นวิธีการแก้ปัญหาที่สะอาดที่สุดที่ฉันสามารถทำได้