[JS] Problem z dodawaniem tekstu do pola

HTML to podstawy w dziedzinie tworzenia stron WWW, Style CSS warto opanować, bowiem za ich pomocą można dostosować odpowiednio wygląd swojej witryny WWW. Zagłębiamy się dalej i udostępniamy w tym forum możliwość zadawania pytań o JavaScript.
ODPOWIEDZ
proton
Posty: 5
Rejestracja: pn lip 09, 2007 3:11 pm

[JS] Problem z dodawaniem tekstu do pola

Post autor: proton »

Otóż mam takie pole do wpisania tekstu:

Kod: Zaznacz cały

<textarea class='textbox' name='news_body' rows='8' style='width:300px;'>$news_body</textarea>


Oraz button:

Kod: Zaznacz cały

<input type='button' value='b' class='button' style='font-weight:bold;width:25px' onClick=\"addText('news_body', '<b>', '</b>');\">


No i po kliknięcu w button powinno dodać tekst <b></b> do textarea a tak sie nie dzieje, co najlepsze na innej podstronie mam taki sam kod tylko że zmaist news_body mam body no i wszystko jest tam ok :/

Kod: Zaznacz cały

function addText(elname, wrap1, wrap2) { 
   if (document.selection) { // for IE 
      var str = document.selection.createRange().text; 
      document.forms['inputform'].elements[elname].focus(); 
      var sel = document.selection.createRange(); 
      sel.text = wrap1 + str + wrap2; 
      return; 
   } else if ((typeof document.forms['inputform'].elements[elname].selectionStart) != 'undefined') { // for Mozilla 
      var txtarea = document.forms['inputform'].elements[elname]; 
      var selLength = txtarea.textLength; 
      var selStart = txtarea.selectionStart; 
      var selEnd = txtarea.selectionEnd; 
      var oldScrollTop = txtarea.scrollTop; 
      //if (selEnd == 1 || selEnd == 2) 
      //selEnd = selLength; 
      var s1 = (txtarea.value).substring(0,selStart); 
      var s2 = (txtarea.value).substring(selStart, selEnd) 
      var s3 = (txtarea.value).substring(selEnd, selLength); 
      txtarea.value = s1 + wrap1 + s2 + wrap2 + s3; 
      txtarea.selectionStart = s1.length; 
      txtarea.selectionEnd = s1.length + s2.length + wrap1.length + wrap2.length; 
      txtarea.scrollTop = oldScrollTop; 
      txtarea.focus(); 
      return; 
   } else { 
      insertText(elname, wrap1 + wrap2); 
   } 
}
atom
Nowy
Nowy
Posty: 145
Rejestracja: wt gru 20, 2005 1:55 pm
Kontakt:

Re: [JS] Problem z dodawaniem tekstu do pola

Post autor: atom »

Zebrałem Twoj kod do kupy:

Kod: Zaznacz cały

<html>
<head>
	<script>
	function addText(elname, wrap1, wrap2) {
	   if (document.selection) { // for IE
	      var str = document.selection.createRange().text;
	      document.forms['inputform'].elements[elname].focus();
	      var sel = document.selection.createRange();
	      sel.text = wrap1 + str + wrap2;
	      return;
	   } else if ((typeof document.forms['inputform'].elements[elname].selectionStart) != 'undefined') { // for Mozilla
	      var txtarea = document.forms['inputform'].elements[elname];
	      var selLength = txtarea.textLength;
	      var selStart = txtarea.selectionStart;
	      var selEnd = txtarea.selectionEnd;
	      var oldScrollTop = txtarea.scrollTop;
	      //if (selEnd == 1 || selEnd == 2)
	      //selEnd = selLength;
	      var s1 = (txtarea.value).substring(0,selStart);
	      var s2 = (txtarea.value).substring(selStart, selEnd)
	      var s3 = (txtarea.value).substring(selEnd, selLength);
	      txtarea.value = s1 + wrap1 + s2 + wrap2 + s3;
	      txtarea.selectionStart = s1.length;
	      txtarea.selectionEnd = s1.length + s2.length + wrap1.length + wrap2.length;
	      txtarea.scrollTop = oldScrollTop;
	      txtarea.focus();
	      return;
	   } else {
	      //insertText(elname, wrap1 + wrap2);
	   }
	}
</script>
</head>
<body>
<form name="inputform" action="">

	<textarea class='textbox' name='news_body' rows='8' style='width:300px;'>Ola ma kota</textarea>

    <input type='button' value='b' class='button' style='font-weight:bold;width:25px'
		onClick="addText('news_body', '<b>', '</b>');">

</form>
</body>
</html>
i zadziałało ok (na IE i FF). Zakomentowalem insertText - bo brakuje źródła tej funkcji. Sprawdź u siebie, czy Twoja forma na name="inputform"
ODPOWIEDZ