Autor Zpráva
Palidi
Profil
Mám takovéto zadání :
- je textarea (určena pro psaní zpráv)
- je sada tlačítek které vkládají např. smajlíky (při psaní jsou textové, při zobrazení se nahradí obrázkem) volají se javascriptem a jako parametr je text který se má vložit
- funkce musí vložit text na pozici kurzoru. Pak musí nastavit kurzor za vložený text
- pokud textarea nemá focus tak ho po vložení bude mít
- pokud už textarea měla nastavený kurzor na nějaké konkrétní pozici ale ztratila focus tak tlačítko vloží text na bývalou pozici kurzoru a nastaví kurzor za vložený text
- vše musí pracovat stejně v IE, Firefoxu a Opeře

Jinými slovy chci dosáhnout toho aby uživateli nikam kurzor neskákal a psal kde naposledy přestal i když se třeba vrátil do prostředka textu.

Kód který jsem zatím stvořil vypadá takto :

definice textarey html


<textarea name="obsah" rows="10" cols="80" class="obsahposta" onclick="cc()" onkeyup="cc()" onselect="cc()"></textarea>


definice funkcí v javascriptu


function cc () {
x = document.forms[0].obsah;
if (document.selection) x.r=document.selection.createRange().duplicate();
}

function sm(t) {
x = document.forms[0].obsah;
x.focus();
if (x.selectionEnd) {
a=x.selectionEnd;
x.value=x.value.substring(0,a)+t+x.value.substring(a,x.textLength);
x.selectionEnd=a+t.length;
x.selectionStart=a+t.length;
} else if (x.r) {
x.r.text+=t;
} else {
x.value+=t;
}
}


funkce sm je volána pro vložení textu. Funkce cc je tam z důvodu uložení aktuální pozice pro IE.

Teď co mám za problémy :

Ve Firefoxu žádné - vše chodí přesně jak má.
V IE je problém při ztrátě focusu. Text se sice vkládá na pozici kde má, ale kurzor se po vložení textu (a nastavení focusu) zobrazí na první pozici textarey. Dovedu si představit jak ho dám na konec textu : k value přičtu prázdný řetězec. Ale nedokázal jsem vyzkoumat jak ho nastavit přesně za vložený text.
V Opeře jak jsem se dočetl není žádná podpora pro vkládání někam doprostřed textu.

Takže otázky zní nevíte někdo jak v IE nastavit pozici kurzoru za vložený text a jak celou záležitost pojmout v opeře ?

Myslím že by se nějaké definitivní řešení hodilo více lidem - tady to taky vkládá vše na konec textu. Když je ten text dlouhý tak je to docela pruda.
Fred
Profil
Jednou jsem někde našel tohle, nemůžu najít původní zdroj, funguje to v IE a v mozille, úplně to nesouvisí, ale řekl bych, že je to třeba pomůže, jestli ne sorry. Vypíše to posici kursoru

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
var pos;
var begin;
var end;
var isSel;
function checkCursor(where) {
isSel=0;
begin=0;
if (document.selection) {
where.focus();
sel = document.selection.createRange();
if(sel.text==""){
sel.text='žžž';
dummy = where.createTextRange();
dummy.findText('žžž');
dummy.select();
pos=where.value.indexOf('žžž');
begin=pos;
document.selection.clear();
document.getElementById('posi').innerHTML='Cursor position: '+(pos+1);
where.focus();
}
if(sel.text!=""){
isSel=1;
sel2=sel.text;
len=sel.text.length
sel.text='žžž'+sel.text;
dummy = where.createTextRange();
dummy.findText('žžž');
dummy.select();
dummy.scrollIntoView();
pos=where.value.indexOf('žžž');
document.selection.clear();
if((pos+1)==(pos+len)){
document.getElementById('posi').innerHTML='Selection at position : '+(pos+1);
}
else{
document.getElementById('posi').innerHTML='Selection from position : '+(pos+1)+' to '+ (pos+len);
}
dummy.findText(sel2);
dummy.select();
where.focus();
}
}
else if (where.selectionStart || where.selectionStart == '0') {//Moz
begin = where.selectionStart;
pos=begin;
end = where.selectionEnd;
if(end==begin){
document.getElementById('posi').innerHTML='Cursor position: '+(begin+1);
where.focus();
where.selectionStart=end;
}
if(end!=begin){
isSel=1;
if(end==begin+1){
document.getElementById('posi').innerHTML='Selection at position : '+(begin+1);
}
else{
document.getElementById('posi').innerHTML='Selection from position : '+(begin+1)+' to '+ end;
}
where.focus();
where.selectionStart=begin;
where.selectionEnd=end;
}
}
}
//-->
</script>
</head>
<body>
<form name=frm>
<input name="txt" value="abcdefgdefghijklmno" onclick="checkCursor(this);" onkeyup="checkCursor(this);" onfocus="setSelectionRange(0,0)"><br>
</form>
<span id="posi"></span><br>
</body>
</html>
Anonymní
Profil *
fggdgsg
pa3k
Profil *
http://www.alexking.org/blog/2003/06/02/inserting-at-the-cursor-using- javascript/
nutne v zverejnenom zdrojaku opravit apostrofy, dnes som na to upozornil, mozno to opravia.
peta
Profil *
Pri Fredove scriptu mne napada...
vepsat tam cely text znova. Neukladat pozici, ulozit text.
Spike
Profil
kód jsem napsal do tématu s názvem:
<a href="javascript:"vloz do textarea neco
sadsad
Profil *
[img][/img][img]aaa[/img] sda dsa
sadsad
Profil *
Anonymní
Profil *
Toto téma je uzamčeno. Odpověď nelze zaslat.

0