Text in Textare einfügen

Chris Hunter
moinzen!

ich mag in einer TEXTAREA per mausklick auf einen knop bestimmten text einfügen und zwar genau dort wo gerade der cursor steht. genau so wie es bei den smileys hier im board gemacht wird großes Grinsen mein script das duch dieses onclick des buttons ausgelöst wird sieht so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

function AddText(thetext, theform) 
{
  theform=document.formular;
  thetext = " "+thetext+" ";
  if(theform.bigtext.createTextRange && theform.bigtext.caretPos) 
  {
    var caretPos = theform.bigtext.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? thetext + ' ' : thetext;
  } 
  else 
  {
    theform.bigtext.value += thetext;
  } 
  AddTxt = "";
  theform.bigtext.focus();
}



mein Problem ist jetzt das er den text immer am ende einfügt.

das formular heißt formular und das textfeld heißt bigtext.
mach ich etws falsch?
Plattnase
...hab genau das gleiche prob, und das mal so versucht:


code:
1:
2:
3:
<img src="bilder/smilies/s2.gif" alt=":O" border="0" onclick="document.forms[0].comment.value+=':O ';">


und dann textarea

code:
1:
2:
3:
<textarea name="comment" rows=15 cols=55></textarea>


geht aber nicht...
Chris Hunter
ja genau weil der string zu der textveldvalue nur dazugezählt wird, deshalb hatte ich ja versucht das mit caretPos zu lösen. d.h. wenn der cursor am ende steht soll der text dazugezählt werden und wenn der cursor irgendwo in der mitte steht soll der text an der stelle des cursors eingefügt werden. jedoch schlägt das ganze teil schon an der if abfrage fehl. der rechner ist Immer der meinung der cursor würde am ende des textes stehen...

das was mich so wundert ist, ich hab hier im bbCode geluntzt und dort wird es GENAU SO gemacht wie ich es geschreiben habe, nur heir funktioniert es. ich bin voll ratlos...
ich weis das es geht!!!
Plattnase
hab eine lösung:

link:
code:
1:
2:
3:
<img src="bilder/smilies/s2.gif" alt=":O" border="0" onclick="document.formname.textareaname.value+=':O ';"> 


form:
code:
1:
2:
3:
<form name="formname">


textarea:

code:
1:
2:
3:
<textarea name="textareaname">


alles klar? Augenzwinkern
Chris Hunter
jo, look in the code ganz oben. das habe ich bereits schon so gemacht:

theform.bigtext.value += thetext;


aberrrrr. mein problem ist ja der andere teil und zwar der teil wo der cursor nicht am ende des textes seteht sonjdern z.B. in der mitte. ich muss einen weg finden diesen zustand zu erkennen, und dann den text an der cursorposition EINZUFÜGEN...

das ist mein problem, weil es nicht geht. watch the code ganz oben.
neonator
du hast nur die hälfte rauskopiert...
so funktioniert es bei mir:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
<a onClick="AddText('TEST',document.all.theform);">add TEST</a>

<form name="theform">

<textarea name="message" rows=15 cols=60 wrap="soft" onChange=getActiveText(this) onclick=getActiveText(this) onFocus=getActiveText(this)>hehe</textarea>

</form>

<script>
function AddText(NewCode,theform) {
 if (theform.message.createTextRange && theform.message.caretPos) {
  var caretPos = theform.message.caretPos;
  caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? NewCode + ' ' : NewCode;
 } else theform.message.value+=NewCode
 AddTxt = "";
}
function smilie(thesmilie) {
 AddSmile = " "+thesmilie+" ";
 theform = document.bbform;
 AddText(AddSmile,theform);
}
function getActiveText(msg) {
 selectedText = (document.all) ? document.selection.createRange().text : document.getSelection();
 if (msg.createTextRange) msg.caretPos = document.selection.createRange().duplicate();
 return true;
}
</script>


sollte gehen.. hab ich auch aus deisem forum kopiert Augenzwinkern )
Chris Hunter
ja ich hab doch auch alles so, nur ohne das getActiveText, aber das brauch ich ja auch nicht.. oder übersehe ich was?
neonator
bei mir geht es so wie oben, bei dir aber glaub ich, net....
ich hab ie6... aber sollte ja gehen, wenn es im forum geht...

probier mal mit dem source oben /\...
Chris Hunter
huuu - ja ich hab dieses onchange nicht in der textarea daran kanns noch liegen. ich probiers mal aus. danke für wiedermal für das öffnen meienr müden augen(siehe auch mein avatar) ich bin ein hirsch
neonator
hab noch ein bisel stuff geposted...
so gehts, und es ist nix dabei, was es nicht braucht:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
<a onClick="AddText('TEST',document.all.theform);">add TEST</a> 

<form name="theform"> 

<textarea name="message" rows=15 cols=60 wrap="soft" onChange=getActiveText(this) onclick=getActiveText(this) onFocus=getActiveText(this)>hehe</textarea> 

</form> 

<script> 
function AddText(NewCode,theform) { 
 if (theform.message.createTextRange && theform.message.caretPos) { 
  var caretPos = theform.message.caretPos; 
  caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? NewCode + ' ' : NewCode; 
 } else theform.message.value+=NewCode 
 AddTxt = ""; 
} 
function smilie(thesmilie) { 
 AddSmile = " "+thesmilie+" "; 
 theform = document.bbform; 
 AddText(AddSmile,theform); 
} 
function getActiveText(msg) { 
 selectedText = (document.all) ? document.selection.createRange().text : document.getSelection(); 
 if (msg.createTextRange) msg.caretPos = document.selection.createRange().duplicate(); 
 return true; 
} 
</script>

hab schon lange mal so ein script basteln wollen.. aber ein paar befehle sind halt net in selfhtml Augenzwinkern