TAM BİR EVET BASİT ÇÖZÜM
Güncelleme 2020-05-14
(Cep telefonları ve tabletler için geliştirilmiş tarayıcı desteği)
Aşağıdaki kod çalışacaktır:
- Tuş girişinde.
- Yapıştırılan metinle (sağ tıklayın & ctrl + v).
- Metin kesme ile (sağ tıklama & ctrl + x).
- Önceden yüklenmiş metin ile.
- Tüm textarea (çok satırlı metin kutusu) sitesi genişliğinde.
- İle Firefox (v31-67 test).
- İle Chrome (v37-74 test).
- İle IE (v9-V11 test edildi).
- İle Kenar (V14-V18 test).
- İle IOS Safari .
- İle Android Tarayıcı .
- JavaScript katı modu ile .
- Mı W3C geçerli kıldı.
- Ve akıcı ve verimli.
SEÇENEK 1 (jQuery ile)
Bu seçenek jQuery gerektirir ve test edilmiştir ve 1.7.2 - 3.3.1 ile çalışmaktadır.
Basit (Bu jquery kodunu ana kod dosyanıza ekleyin ve unutun.)
$('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
SEÇENEK 2 (Saf JavaScript)
Basit (Bu JavaScript'i ana komut dosyanıza ekleyin ve unutun.)
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
SEÇENEK 3 (jQuery Uzantısı)
Otomatik boyutta olmasını istediğiniz textareas'a daha fazla zincir uygulamak istiyorsanız kullanışlıdır.
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);
});
});
}
});
İle çağır $('textarea').autoHeight()
JAVASCRIPT İLE TEKSTİL GÜNCELLEME
JavaScript aracılığıyla bir metin alanına içerik enjekte ederken seçenek 1'deki işlevi çağırmak için aşağıdaki kodu ekleyin.
$('textarea').trigger('input');
PRESET TEXTAREA YÜKSEKLİĞİ
Metin alanının başlangıç yüksekliğini düzeltmek için ek bir koşul eklemeniz gerekir:
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>