Autor Zpráva
Deedee
Profil *
Dobrej den ve spolek...

Snažím se vytvořit skritp na vkládání BB značek do textarea, ale v IE mi to pořád hází chyby (v FF te jede bez problémů). Chci, aby se vkládal na pozici kurzoru a pokud bude označen nějaký text, tak aby text byl vložen do značek.


Javascript
<script type="text/javascript">
             <!--
             function insertAtCursor(myField, prefix, postfix) {
	           var re = new RegExp("^(.*\S)(\s*)$");
             myField.focus();
             //IE support
             if (document.selection) {
             sel = document.selection.createRange();
		         var selection = sel.zprava;
		         var wasEmpty = (selection == '');
		         var space = '';
		         if (!wasEmpty) {
			       var matches = selection.match(re);
			       if (matches) {
				     selection = RegExp.$1;
				     space = RegExp.$2;
			       }}
             sel.text = prefix+selection+postfix+space;
		         sel.collapse(false);
		         if (wasEmpty) {
			       sel.moveEnd('character',-(prefix.length+1))
		         }
		         sel.select();
             }
             //MOZILLA/NETSCAPE support
             else {
		         if (myField.selectionStart || myField.selectionStart == '0') {
			       var startPos = myField.selectionStart;
			       var endPos = myField.selectionEnd;
			       var selection = myField.value.substring(startPos, endPos);
			       var wasEmpty = (startPos == endPos);
			       var space = "";
			       if (!wasEmpty) {
				     var matches = selection.match(re);
				     if (matches) {
					   selection = RegExp.$1;
				     space = RegExp.$2;
				     }}
			       myField.value = myField.value.substring(0, startPos)
						 + prefix+selection+postfix+space
						 + myField.value.substring(endPos, myField.value.length);

			       var newPosition;
			       if (wasEmpty) {
				     newPosition = startPos+prefix.length;
			       } else {
				     newPosition = startPos+prefix.length+selection.length+postfix.length+space.length;
			       }
			       myField.setSelectionRange(newPosition, newPosition);
		         } else {
			       myField.value += prefix+postfix;
			       myField.setSelectionRange(startPos+prefix.length, startPos+prefix.length);
		         }}}
             -->
             </script>


formulář
<form method="post" action="zprava.php" id="form">
<textarea class="reg-textarea-big" cols="50" rows="6" name="zprava" id="zprava"></textarea>


vkládání
<a href="javascript:insertAtCursor(document.getElementById('form').zprava    , 'znacka', '/znacka');" ><img src="pic/bold.gif" alt="bold" class="pomocnik-pic" /></a>


Jak jsem psal, v IE nefunguje (v opeře teké ne), ale ve FF šlape jako hodinky... kde může být chyba?

— Moderátor (S): Upraven zdrojový kód podle autorova dalšího příspěvku. —
peta
Profil
Deedee
http://www.volny.cz/peter.mlich/www.htm#mssub12
google.com textarea javascript cursor crossbrowser
google.com textarea javascript kurzor site:diskuse.jakpsatweb.cz
Kdo nehleda, nenajde.

Str4wberry - vyborne, konecne inteligentni moderator, ktery se umi pod upravy podepsat, napise druh upravy a nezahlcuje zbytecnym prispevkem :)
Deedee
Profil *
google sjíždím už několik hodin, ale řešení jsem nenašel.

Problém vězí někde tady
var re = new RegExp("^(.*\S)(\s*)$");
var matches = selection.match(re);


v debugeru mi to hlásí, že je buď nulový, nebo není objekt, ale nevím si s tím rady, javascript není moje nejsilnější stránka :(

Jinak díky adminovi za opravu.
centi
Profil
var selection = sel.zprava;

zmeniť na:
var selection = sel.text;
Deedee
Profil *
jo, funguje to, díky moc :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0