Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długie pole tekstowe i ustawienie kursora
athabus
post 22.05.2008, 19:19:08
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Witam,

mam taki nietypowy problem. Mam pole tekstowe w którym zaznaczam tekst - po kliknięciu w przycisk zastępuje zaznaczenie innym tekstem.

Kod
function replaceselection(textarea, text)
{
    textarea.value = (textarea.value).substring(0, textarea.selectionStart)
    + text + (textarea.value).substring(textarea.selectionEnd);
}


Wszystko działa sprawie, ale jest jeden irytujący problem - jeśli pole tekstowe jest na tyle długie, że wymaga przewijania to po zastąpieniu tekstu pole tekstowe "przewija" się tak, że ląduje na początku tekstu. Ja natomiast chciałbym pozostać (lub wrócić) do tego fragmentu. Próbowałem zaznaczyć daną pozycję - udało się - jest zaznaczenie ale i tak ląduje na początku tekstu...
Do zaznaczenia fragmentu używam takiej funkcji:


Kod
function setSelRange(inputEl, selStart, selEnd) {
if (inputEl.setSelectionRange) {
  inputEl.focus();
  inputEl.setSelectionRange(selStart, selEnd);
} else if (inputEl.createTextRange) {
  var range = inputEl.createTextRange();
  range.collapse(true);
  range.moveEnd('character', selEnd);
  range.moveStart('character', selStart);
  range.select();
}
}


Czy dałoby się to jakoś zmodyfikować, aby pole tekstowe nie przewijało się na sam początek?
Wiem, że jest to możliwe bo np. edytor postów na tym forum to potrafi (np. po dodaniu tagu code), ale nie potrafię odnaleźć odpowiedniego fragmentu niestety...

Będę wdzięczny za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
devnul
post 22.05.2008, 20:26:47
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


dałoby się

Kod
function setSelRange(inputEl, selStart, selEnd) {
var tmp=inputEl.scrollTop;
if (inputEl.setSelectionRange) {
  inputEl.focus();
  inputEl.setSelectionRange(selStart, selEnd);
} else if (inputEl.createTextRange) {
  var range = inputEl.createTextRange();
  range.collapse(true);
  range.moveEnd('character', selEnd);
  range.moveStart('character', selStart);
  range.select();
}
inputEl.scrollTop=tmp;
}


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
athabus
post 22.05.2008, 20:53:44
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Dzięki dzięki dzięki yahoo.gif

Od trzech godzin szukałem rozwiązania i już miałem dość. Moje oczy są Ci wdzięczne ;-)
Go to the top of the page
+Quote Post
Hag
post 24.05.2008, 09:21:53
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 24.05.2008

Ostrzeżenie: (0%)
-----


Żeby nie zakładać nowego tematu. W javascripcie dopiero raczkuje i mam podobny problem z przewijaniem .
Gdzieś w necie wyszperałem taki kod na watawianie tagów bbcode do textarea , wszystko pieknie smiga, ale z tym przewijaniem mecze sie juz z 2 godziny i nic madrego nie wymysliłem i raczej nie wymysle .
Kod
   D=document,S=[],T=[],C=alert,B=unescape;onload=function(){F=D.getElementById('area')}
   function bbcode(x,z){(z=s())?A('['+x+']'+z+'[/'+x+']'):R(x)}
   function A(x){D.selection?(F.focus(),D.selection.createRange().text=x):(F.selectionStart||F.selectionStart=='0')?F.value=F.value.substring(0,F.selectionStart)+x+F.value.substring(F.selectionEnd,F.value.length):F.value+=x}
   function s(){return D.selection?D.selection.createRange().text:F.value.substring(F.selectionEnd||0,F.selectionStart||0)}
   function R(x){T[x]?'':T[x]=0;T[x]?CT(x):(S.push(x),T[x]=1,A('['+x+']'),St(x,'*'))}
   function St(i,x){D.getElementById(i).value=i+x}Z='%52%4b';function emot(x){A(x)}
   function CT(x,a){T[a=S.pop()]=0;A('[/'+a+']');St(a,'');a!=x?CT(x):''}
   function CA(e){while(S[0]){A('[/'+(e=S.pop())+']');T[e]=0;St(e,'')}}
   function List(x,li){x='[list]\n';do{li=prompt('Wpisz element listy (jesli chcesz zakonczyc dopisywanie do listy pozostaw pole puste lub kliknij \'Anuluj\'','');x+=li?'[*]'+li+'[/*]\n':''}while(li);A(x+'[/list]')}
   function Url(u,d,z){A("[url="+(u=prompt("Podaj adres strony lub pliku","http://"))+"]"+(s()?s():((d=prompt("Opis odnosnika",""))?d:u))+"[/url]")}
   function Img(z){A("[img]"+((z=s())?z:prompt("Podaj sciezke do grafiki","http://"))+"[/img]")}
   function sfc(l,t){A("["+t+"="+l.value+"]"+s()+"[/"+t+"]")}
   function Quote(t){A("[quote"+((t=prompt('Podaj imie cytowanej osoby'))?"="+t:"")+"]"+s()+"[/quote]")}


oto kod.
Go to the top of the page
+Quote Post
devnul
post 24.05.2008, 13:27:58
Post #5





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


przeczytaj pierwszy post athabus'a i mój pod nim - zobacz różnice w kodzie i wyciągnij wnioski


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
Hag
post 24.05.2008, 15:12:07
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 24.05.2008

Ostrzeżenie: (0%)
-----


rzeczywiście myślenie nie boli:)
Tak to czasem jest że sie czlowiek patrzy na cos jak wół i z godziny na godzine jest bardziej slepy.
Problem rozwiazany.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 15:04