Jump to content
php.lv forumi

Kursora atrašanās vietas mainīšana


Lynx

Recommended Posts

Tātad man ir neliels skripts, ceru, ka nav pa lielu, lai te kopētu:

 

function codeinsert(tag) {
var myValue = "[" + tag + "][/" + tag + "]"; 
//IE 
if (document.selection) {
document.post.txt.focus();
sel = document.selection.createRange();
sel.text = myValue;
document.post.txt.focus();
}
//MOZILLA
else if (document.post.txt.selectionStart) {
var startPos = document.post.txt.selectionStart;
var endPos = document.post.txt.selectionEnd;
document.post.txt.value = document.post.txt.value.substring(0, startPos)
+ myValue
+ document.post.txt.value.substring(endPos, document.post.txt.value.length);
document.post.txt.focus();
document.post.txt.selectionStart = startPos + myValue.length;
document.post.txt.selectionEnd = startPos + myValue.length;
} else {
document.post.txt.value += myValue;
document.post.txt.focus();
}
}

Ideja ir šāda, ka nospiežot uz linku tiek ielikts iekš <textarea> noteikts teksts piemēram [c][/c](C, jo šejienes bbcode izkauj B tagus) kursora atrašanās vietā un pēc ielikšanas kursors novietojas tieši pēc ievietotā teksta.

 

Jautājums, kā uztaisīt, ka kursors tiek pabīdits, piemēram, 4as zīmes atpakaļ, lai būtu tieši pa vidu starp [c] un [/c]?

Link to comment
Share on other sites

Nezinu kā ar IE, bet uz Mozillas:

document.post.txt.setSelectionRange(6,6);

Kur 6 - charakters pēc kura uzlikt kursoru (īstenībā tā fja iezīmē tekstu no pirmā parametra pozīcijas līdz otrā parametra pozīcijai, bet ja nu abi ir vienādi, tad vienkārši pozicionējas kursors)

 

Edit: šitā jādara ar IE: http://www.howtocreate.co.uk/emails/MahithaKancherla.html

Edited by bubu
Link to comment
Share on other sites

Ideāli, paldies!

 

loc = document.post.txt.selectionStart - 4;

document.post.txt.setSelectionRange(loc,loc);

 

Eh, nekur nevaru atrast javascript iebūvēto funkciju sarakstu tikai samplus. Tad nebūtu japrasa šeit: kā var noteikt stringa garumu. Tad es kodā automātiksi noteiktu cik garš ir "tag" pieskaitītu klāt 3 jo [/] un nebūtu manuāli nekas jāraksta.

Link to comment
Share on other sites

 var s="blabla";
 alert(s.length);

 

Javasckript dokumentācija jāskatās

Par iebūvētajiem objektiem (string, array, regexp, utt): http://docs.sun.com/source/816-6408-10/

Par DOM/DHTML MS refernece: http://msdn.microsoft.com/workshop/author/...rence_entry.asp

Par DOM Mozilla reference: http://www.mozilla.org/docs/dom/domref/dom_shortTOC.html

 

Tur viss ir.

Edited by bubu
Link to comment
Share on other sites

Tā featuru ziņā uztaisīju visu ko vēlos un viss arī strādā kā nākas, ja neskaita 2us bugus - katram browserim pa vienam.

<script type="text/javascript">
     <!--
function codeinsert(tag) {
//IE 
if (document.selection) {
if(tag == "URL" || tag == "IMG") { var myValue = "[" + tag + "]http://" +  document.selection.createRange().text + "[/" + tag + "]";  }
else { var myValue = "[" + tag + "]" +  document.selection.createRange().text + "[/" + tag + "]";  }
document.post.txt.focus();
sel = document.selection.createRange();
sel.text = myValue;
document.post.txt.focus();
var range = document.post.txt.createTextRange();
position = range.text.length;
range.collapse(true);
range.moveEnd("character", position - tag.length -3);
range.moveStart("character", position - tag.length -3);
range.select();
}

Tā IE daļa visa pozicionēšana darbojas ideāli līdz brīdim, kad tiek nospiests Enter tālāk tiek skaitīta viena zīme pa daudz, kas nojauc visu kursora pozicionēšanu un galīgi nav labi, ja [/sheit] tiek novietots kursors. Ir kautkaads veids kā panākt, ka tie enter tiek ignorēts skaitīšanā?

//MOZILLA
else if (document.post.txt.selectionStart) {
var startPos = document.post.txt.selectionStart;
var endPos = document.post.txt.selectionEnd;
if(tag == "URL" || tag == "IMG") { var myValue = "[" + tag + "]http://" + document.post.txt.value.substring(startPos,endPos) + "[/" + tag + "]";  }
else { var myValue = "[" + tag + "]" + document.post.txt.value.substring(startPos,endPos) + "[/" + tag + "]";  }
document.post.txt.value = document.post.txt.value.substring(0, startPos)
+ myValue
+ document.post.txt.value.substring(endPos, document.post.txt.value.length);
document.post.txt.focus();
loc = startPos + myValue.length - tag.length -3; 
document.post.txt.setSelectionRange(loc,loc);
} else {
document.post.txt.value += myValue;
document.post.txt.focus();
}
}
// -->
</script>

Mozzilai atkal problēma ir tāda, ka pati pirmā zīme iekš <textarea> tiek principiāli ignorēta un rodas dīvaini gļuki. Ja nav nevienas zīmes, tad kursors pēc teksta ievadīšanas tiek novietots beigās, nevis pāris zīmes atpakaļ. Tikko kā ierakstam kautvai atstarpi viss darbojas. Vēlāk kad ieviesu, lai pa vidu tiktu ievadīts iezīmētais teksts, ja nav neviena zīme tad vienkārši tiek insertots vārds "undefined", kā arī ja mēs iezīmējam tekstu un iezīmētajā teksta laukumā ir 1ā zīme viss teksts tiek repleicots ar vārdu "undefined". Citos gadījumos viss strādā perfekti.

Link to comment
Share on other sites

mozillas vaina tev ir šāda: 0==false!

Ja selectionStart=0, tad if (0) ir false un mozilla kods neizpildās, izpildās trešā koda daļa, kurā nav definēts myValue, tāpēc arī ir undefined.

IE vainu tev nezinu, es uzrakstīju savu kodu, un tas gan uz mozillas, gan IE ir ok:

<html><head><script>
   function codeinsert(tag) {
       var elem = document.getElementById("txt");
       elem.focus();

       if (typeof document.selection != "undefined") {
           var range = document.selection.createRange();
           range.text = "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") +
                        range.text + "[/" + tag + "]";  
           range.move("character", -tag.length-3);
           range.select();
       } else if (typeof elem.selectionStart != "undefined") {
           var startPos = elem.selectionStart;
           var endPos = elem.selectionEnd;
           var myValue = "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") +
                         elem.value.substring(startPos ,endPos) + "[/" + tag + "]";  
           
           elem.value = elem.value.substring(0, startPos) +
                        myValue +
                        elem.value.substring(endPos, elem.value.length);
           var x = startPos + myValue.length - tag.length - 3;
           elem.setSelectionRange(x, x);
       } else {
           elem.value += "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") + "[/" + tag + "]";
       }
   }
</script></head><body>
 <input type="button" onclick="codeinsert('IMG');" value="IMG"/>
 <input type="button" onclick="codeinsert('URL');" value="URL"/>
 <input type="button" onclick="codeinsert('B');" value="B"/><br/>
 <textarea id="txt" rows=10 cols=50></textarea>
</body></html>

Edited by bubu
Link to comment
Share on other sites

×
×
  • Create New...