Ben bir oto-girinti textarea yapmak için çalışılıyor ve şimdiye kadar aşağıdaki kodu ile çalışır. Ben yaşıyorum sorun şu anda satır sekmeleri hesaplamak için Enter tuşuna basarak varsayılan eylemi engelliyor, ve sonra daha sonra yeni satır ekleyerek olmam.
Bu çalışır, ama ben aşağı girmek tutarsanız şapka alt satırı vurur kadar bu, bu textarea kaydırma değil, textarea varsayılan eylemi olmasını istiyorsanız, ve sonra kaydırma çubuğu alt satırdaki şapka ile kalır . Her yerde textarea kullanıldığında aşağıda geçerli kod görme alanında şapka tutar, ancak şapka artık kaybolur gibi bir uzlaşma olduğu, yukarı kaydırmak için içerik şapka yukarıda neden olur. Başka bir çözüm varsa bu iyi çalışır, ama diğer fikirler vardır umuyorum.
var start = this.selectionStart-1;
var end = this.selectionEnd;
var sT = this.scrollTop;
var sH = this.scrollHeight;
var vH = $(this).height();
var x = (sH - sT) - vH;
// Check if hitting enter on the first line as no newline will be found
if (this.value.lastIndexOf('\n',start)==-1)
var startSubstr = 0;
else
var startSubstr = this.value.lastIndexOf('\n',start)+1;
var endFirst = end - startSubstr;
var valueToScan = this.value.substr(startSubstr,endFirst);
var count = 0;
// Count only \t at the beginning of the line, none in the code
while (valueToScan.indexOf('\t')!=-1) {
if (valueToScan.indexOf('\t')!=0)
break;
count++;
valueToScan = valueToScan.substr(valueToScan.indexOf('\t')+1);
}
// Command to isert the newline, and then add the \t's found in previously
$(this).insertAtCaret('\n');
for (var i=0;i<count;count--) {
$(this).insertAtCaret('\t');
}
var sH = this.scrollHeight;
this.scrollTop = (sH - x) - vH;
EDIT As an update, to clear away any confusion, I'm attempting to create an IDE style textbox, so for example in most IDEs if you type the following
function example(whatever) {
Example Stuff // And then hit enter here
Ben okumak için daha kolay kod tutmak için "Örnek sayfalar" olarak sol sınırından aynı sekme mesafeye götürmek istiyorum. Ben şu anda bu özelliğe sahip ama sorun ben o işlevsellik sağlamak zorunda kalıyoruz ki, Enter tuşuna kesen kulüpler olduğunu. Ben zorluk imleci alt sınır vurur kadar metin kutusu kaydırma değil tam işlevselliğini kopyalayan yaşıyorum. Eğer textarea üstündeki girmek tutmak olsaydı Yani, imleç sadece alt sınır vurur, ve sonra textarea için kaydırma imleci takip edecek kadar onunla herhangi bir metin hareketli, textarea aşağı kayar. Mantıklı?
EDIT 2 Updated tags to indicate code is with PHP
Bu mesaja oturan olmuştur ederken bu üzerinde çalışıyorum. Ben zaman bir şans keşfetmek için gidiyorum başka bir seçenek yerine sadece darbesi varsayılan eylem girmek ve okumak dize lastIndexOf('\n')-1
den {En son için [(1) izin girmek önlemede daha olduğunu düşünüyorum }] herhangi bir \t
için. Bunu bana aradığım dize vereceğini düşünüyorum, ama textarea davranışını karışıklık olmadan. Test sonrasında tekrar güncelleyeceğiz.
EDIT 3 Ben anahtar sonra dizeyi taramak için karar benim önceki güncelleme başına, Çözülmüş doğal davranışı koruyarak, preslenmiş (bölüm ilgilenenler için aşağıya eklenmiştir değişti) ve gerçekten kalan tek sorun olduğunu size eğer girmek tutun, o bana göre gayet basın, girmek kökenli gelen girinti saymaz. Ben o hâlâ yakın oldu cevap verdi önce anlamaya, her ne kadar, matyr bu birini vereceğim.
if (this.value.lastIndexOf('\n',start-2)==-1) {
var startSubstr = 0;
} else {
var startSubstr = this.value.lastIndexOf('\n',start-1)+1;
}
var valueToScan = this.value.substr(startSubstr,start);