• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Ein Button um einen Text in die jeweils aktive Textbox an Curserposition einzufügen?

mekun

New member
Hallo zusammen,
Ich habe mir ein formular gebastelt zum befüllen meiner Datenbank, für englischen und deutschen Text (jeweils eine Textarea)
nun habe ich ein paar Textbausteine die ich immer mal wieder einfügen möchte und zwar an der Stelle wo der curser sich gerade in der aktiven Textbox befindet.
Ich habe mir bereits die ein oder andere Lösung ergoogelt, jedoch muss in der Funktion der Name der Textbox (und bei allen Lösungen wird es nur mit EINER Textbox gemacht) eingegeben werden.

nun habe ich eine Variante bei der ich zwar die jeweils aktive Textbox ansteuer, allerdings weiss ich nicht wie ich hier weiter komme das der Textbaustein an der Curserposition eingefügt wird. kommt immer ans Ende.


HTML:
var ta;
   
    function einfuegen(){
      document.getElementsByName(ta)[0].value += '01TextbausteinXYZ';
    }
	
	var br;
   
    function einfuegen_br(){
      document.getElementsByName(ta)[0].value += '02TextbausteinABC';
    }

die Textbox sieht dann wie folgt aus:

HTML:
<textarea id="beschreibung_de"  name="beschreibung_de" class="message"  cols="100" rows="10" onFocus="ta=this.name" onClick="ta=this.name"></textarea>

nun habe ich relativ wenig Ahnung von Javascript weshalb es mir schwer bis sehr schwer fällt diese funktion umzuschreiben oder zu ergänzen mit einem Code der mir dann die entsprechende Curserposition ermittelt und dort den Text einfügt (wo sich recht schnell funktionierende scripts ergooglen lassen, welche sich aber immer alle auf eine festgelegte Textarea beziehen. z.B.

HTML:
<script type="text/javascript">
<!--
function insert(aTag, eTag) {
  var input = document.forms['formular'].elements['eingabe'];
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfügen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
}
//-->
</script>
</head>
<body>
  <h1>Demo: Einfügen von Inhalten in eine Textarea</h1>
  <p>Positionieren Sie einfach den Cursor innerhalb der textarea oder markieren Sie Text darin.
     Wählen Sie dann "Einfügen", um <code>[link]...[/link]</code> an dieser Stelle
     einfügen zu lassen, sofern es der Browser ermöglicht.</p>
  <form name="formular" action="">
    <p><textarea name="eingabe" cols="30" rows="10">Ihre Nachricht</textarea></p>
    <p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>
  </form>
</body>
</html>



wer könnte mir dabei behilflich sein ggf hinweis geben was ich wie abändern muss damit ich ein button (der einzfügende Text soll dabei auf dem Button hinterlegt sein, da ich für verschiedene Textbausteine verschiedene buttons habe) damit aber in beliebiger Textbox an aktivier Curserposition diesen Textbaustein einfügen kann?!
 
Zuletzt bearbeitet von einem Moderator:
Folgender JQuery-Code, machts möglich:

Code:
(function($, undefined) {  
    $.fn.getCursorPosition = function() {  
        var el = $(this).get(0);  
        var pos = 0;  
        if ('selectionStart' in el) {  
            pos = el.selectionStart;  
        } else if ('selection' in document) {  
            el.focus();  
            var Sel = document.selection.createRange();  
            var SelLength = document.selection.createRange().text.length;  
            Sel.moveStart('character', -el.value.length);  
            pos = Sel.text.length - SelLength;  
        }  
        return pos;  
    }  
})(jQuery);

nun einfach dem Textfeld eine eindeutige ID verpassen

Code:
<textarea id="[B]the_id_value[/B]">the text is an example</textarea>

und eine onClick-Funktion einfügen.

Code:
<textarea id="[B]the_id_value[/B]" onclick="alert( $('#the_id_value').getCursorPosition() );  
    return false;">the text is an example</textarea>

Da bei dir die ID aber unterschiedlich ist, musst du mit
PHP:
this.id
arbeiten.

Alternativ geht auch dieser Code:

Code:
function caret(node) {
 //node.focus(); 
 /* without node.focus() IE will returns -1 when focus is not on node */
 if(node.selectionStart) return node.selectionStart;
 else if(!document.selection) return 0;
 var c		= "\001";
 var sel	= document.selection.createRange();
 var dul	= sel.duplicate();
 var len	= 0;
 dul.moveToElementText(node);
 sel.text	= c;
 len		= (dul.text.indexOf(c));
 sel.moveStart('character',-1);
 sel.text	= "";
 return len;
}

aufgerufen wird das mit

Code:
<textarea id="textarea" style="width:80%;height:100px;">
You can move caret around in this textarea and there should be a position indicator below which tells you what the caret position in this textarea is.
Line break
</textarea><br><input type="text" id="indicator" style="width:30px;"><script type="text/javascript">
 var indicator	= document.getElementById("indicator");
 var textarea	= document.getElementById("textarea");
 setInterval(function() { indicator.value = caret(textarea);}, 100);
</script>

auch hier solltest du anstelle der
PHP:
setInterval(function()
ein
PHP:
onclick
an die Box hängen und dann
PHP:
caret(this.id);
benutzen können,
habs aber nicht gestestet.

Falls du lieber einen Extra-Button haben willst, kannst du den ja einfach ganz normal im Doument erstellen und dann einfach ein onclick anbinden.
 
Zuletzt bearbeitet:
Du kannst auch dein bestehendes Scrip einfach umbauen. Statt:
Code:
function insert(aTag, eTag) {
  var input = document.forms['formular'].elements['eingabe'];
  input.focus();
  /* für Internet Explorer */
  ... weiterer Code ...
kannst du das so abändern:
Code:
function insert(input, aTag, eTag) {
  input.focus();
  /* für Internet Explorer */
  ... weiterer Code ...

Den Aufruf Änderst du dann so, wenn deine textarea einen Namen hat:
<p><input type="button" value="Einfügen" onclick="textareaInsertTag(this.form.eingabe, '[link]', '[/link]');"></p>

Den Aufruf Änderst du dann so, wenn deine textarea eine ID hat:
<p><input type="button" value="Einfügen" onclick="textareaInsertTag(document.getElementById('eingabe'), '[link]', '[/link]');"></p>

etc...


PS: Es heißt onclick (mit einem kleinen c).
 
Hey Jungs, danke soweit, auch wenn ich's nicht hin krich :(

ich will zwar verstehen was ich da verwende um daraus auch ggf. für die zukunft was zu lernen (also wäre ein vorgekautes script mit vorgekauteer textbox und vorgekautem button, nicht das aller klügste) , nur glaub ich verstehe ich es besser wenn es funktioniert, das wiederrum ist doch wieder ganz klug :)
und momentan bekomm ich nichts funktionierendes auf die reihe.

@dbarthel
wenn ich
Code:
<textarea id="the_id_value" onclick="alert( $('#the_id_value').getCursorPosition() );  
    return false;">the text is an example</textarea>
und du jetzt schreibst, musst nur noch eine eindeutige ID vergeben, warum vergibst Du nicht einfach eine :confused: kann ich dann ja noch ersetzen.
nun frag ich mich, was ist mit der Raute (#) bleibt die da vor der ID welche immer ich auch da einsetze oder nicht kann ich zum testen the_id_value einfach dort stehen lassen? Warum ein alert? und was müsste auf den "onclick" des buttons wenn in in die Textarea was einfügen will?
Wo und an welcher Stelle bei euren Beispielen hinterlege ich den Text der dann an Curserposition eingefügt weden soll?

Eingefügt werden manchmal Formatierungen, mal Zeilenumbrüche oder ganze Sätze, angefangen mit zwei Buttons eine Grafik anbei.
ps: ich brauche keine Formatierungen wie
Code:
 [link]..[/link]
wo der curser zwischen den beiden landet ich muss nur das was auf den buttons steht an der aktuellen curserposition eingefügt haben und dann weiter schreiben.


screen.JPG


so sieht es aktuell passend zur Grafik aus:
Code:
var ta;
   
    function einfuegen(){
      document.getElementsByName(ta)[0].value += '<strong><titel></strong>';
    }
	
	var br;
   
    function einfuegen_br(){
      document.getElementsByName(ta)[0].value += '<br><br>';
    }

die Buttons habe ich so beschriftet wie das was eingefügt werden soll, im beispiel gehts um den fetten titel der in der beschreibung auftaucht sowie einen zeilenumbruch, es kommen noch weitere hinzu mit standardsätzen die ich immer wieder verwende... der übersichtlichkeit halber hab ich das mal auf zwei buttons an dieser stelle begrenzt.

ich hoffe einer von euch kann mich noch mal kurz an die hand nehmen und mir da weiter helfen.

Danke schonmal.
 
und du jetzt schreibst, musst nur noch eine eindeutige ID vergeben, warum vergibst Du nicht einfach eine :confused: kann ich dann ja noch ersetzen.
nun frag ich mich, was ist mit der Raute (#) bleibt die da vor der ID welche immer ich auch da einsetze oder nicht kann ich zum testen the_id_value einfach dort stehen lassen? Warum ein alert?

PHP:
<textarea id="the_id_value"
hat doch eine ID, nämlich "the_id_value", natürlich musst du die für deine Bedürfnisse ändern.

Die Raute ist ein Selector und sagt JQuery, das nach einer ID gesucht wird, ähnlich wie bei CSS.

Das Alert war nur zu Demozwecken.

und was müsste auf den "onclick" des buttons wenn in in die Textarea was einfügen will?
Wo und an welcher Stelle bei euren Beispielen hinterlege ich den Text der dann an Curserposition eingefügt weden soll?

wenn du die Cursorposition fest definieren willst, müsste das Script etwa so aussehen:

Code:
function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}
Die erste erwartet, dass Parameter die ID des Elements ist den Cursor einfügen möchten. Wenn das Element nicht gefunden werden kann, passiert nichts (natürlich). Der zweite Parameter ist der Caret Position Index. 0 (Null) wird den Cursor am Anfang setzen. Wenn eine Zahl größer als die Anzahl der Zeichen in der Elemente-Wert übergeben wird, wird den Cursor am Ende vorlegen.

Nun erzwingen wir den Cursor an das Ende aller Textareas auf der Seite zu springen, wenn sie den Fokus erhalten:

Code:
function addLoadEvent(func) {
    if(typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        if(func) {
            var oldLoad = window.onload;

            window.onload = function() {
                if(oldLoad)
                        oldLoad();

                func();
            }
        }
    }
}

// The setCaretPosition function belongs right here!

function setTextAreasOnFocus() {
/***
 * This function will force the cursor to be positioned
 * at the end of all textareas when they receive focus.
 */
    var textAreas = document.getElementsByTagName('textarea');

    for(var i = 0; i < textAreas.length; i++) {
        textAreas[i].onfocus = function() {
            setCaretPosition(this.id, this.value.length);
        }
    }

    textAreas = null;
}

addLoadEvent(setTextAreasOnFocus);

Resulttat sollte etwa so was sein:

Get/Set Caret in Textarea Example
(DEMO)


Den Code im ganzen findest du auch nochmal auf Get/set Cursor In Html TextArea - JavaScript - Snipplr Social Snippet Repository


-------------------------------------------------------------------------------------------------------------


Etwas einfacher wäre diese Funktion:
Code:
function insertAtCursor(myField, myValue) {
   //IE support
   if (document.selection) {
     myField.focus();
     sel = document.selection.createRange();
     sel.text = myValue;
   }
   //MOZILLA/NETSCAPE support
   else if (myField.selectionStart || myField.selectionStart == '0') {
     var startPos = myField.selectionStart;
     var endPos = myField.selectionEnd;
     myField.value = myField.value.substring(0, startPos)
                   + myValue 
                   + myField.value.substring(endPos, myField.value.length);
   } else {
     myField.value += myValue;
   }
 }

und dann kannst du es beispielsweise zum einfügen von SmileyCodes nutzen:

Code:
 function addsmilie(what){
 txt = document.getElementById("text");
 insertAtCursor(txt, what)
 }

addsmilies fügt das an "what" übergebene in die textarea mit der ID "text".

Eingefügt werden manchmal Formatierungen, mal Zeilenumbrüche oder ganze Sätze, angefangen mit zwei Buttons eine Grafik anbei.

Du kannst in ein klassisches textarea keine HTML-Formatierungen wie
PHP:
<strong> ... </strong><br><br>
einfügen!

UPDATE: Einfügen kann man die schon, aber nur wie einen Text, der Inhalte des Textareas wird nicht entsprechend formatiert!

Da müsstest du dann sowas hier machen:

Code:
<div id='fake_textarea' contenteditable></div>

Die Scrollbars kannst du dann man mit CSS und overflow machen.

--------------------------------------------------------------------------

Eine weiter Möglichkeit wäre:

JavaScripts: xTextControl - Projekte - Walter Bislin

dort kannst du unter Demo sehen, was mittels xTextControl möglich ist; allerdings funktioniert das nur mit aktuellen Browsern.

- - - Aktualisiert - - -

Falls du erste die Postion per Klick ins Textfeld auslesen und dann festsetzen willst, müsstest du halt die entsprechenden Scripte kompinieren.
 
Zuletzt bearbeitet:
Heheh... ich habs gefunden...
Hier auch noch mal ein Beispiel so wie ich das mal für ein Projekt (leicht abgewandelt) benutzt hatte.
Habe ein paar Anpassungen an deine Textarea, Festtexte, Funktionsnamen etc. gemacht:
HTML:
<!DOCTYPE html>
<html lang="de">
<head>
	<title>Testseite</title>
	<script>
	/*jslint browser: true, devel: true */
	/*global jQuery, $ */

	'use strict';

	function textareaInsertTag(node, sTag, eTag) {
		var markedText,
			range,
			start,
			end,
			pos;

		if (node === undefined || node === null) {
			return;
		}
		sTag = sTag || '';
		eTag = eTag || '';
		node.focus();
		if (document.selection !== undefined) {// for Internet Explorer
			// Insert the formatting code
			range = document.selection.createRange();
			markedText = range.text;
			range.text = sTag + markedText + eTag;
			// Readjust the cursorposition
			range = document.selection.createRange();
			if (markedText.length === 0) {
				range.move('character', -eTag.length);
			} else {
				range.moveStart('character', sTag.length + markedText.length + eTag.length);
			}
			range.select();
		} else if (node.selectionStart !== undefined) {// for newer on Gecko based browser
			// Insert the formatting code
			start = node.selectionStart;
			end = node.selectionEnd;
			markedText = node.value.substring(start, end);
			node.value = node.value.substr(0, start) + sTag + markedText + eTag + node.value.substr(end);
			// Readjust the cursorposition
			if (markedText.length === 0) {
				pos = start + sTag.length;
			} else {
				pos = start + sTag.length + markedText.length + eTag.length;
			}
			node.selectionStart = pos;
			node.selectionEnd = pos;
		}
	}

	function insertBBCODE(id, value) {
		if (id && value) {
			switch (value) {
			case 'B':
				textareaInsertTag(document.getElementById(id), '[B]', '[/B]');
				break;
			case 'I':
				textareaInsertTag(document.getElementById(id), '[I]', '[/I]');
				break;
			case 'U':
				textareaInsertTag(document.getElementById(id), '[U]', '[/U]');
				break;
			case 'FONT':
				textareaInsertTag(document.getElementById(id), '[FONT]', '[/F]');
				break;
			case 'URL':
				textareaInsertTag(document.getElementById(id), '[URL]', '[/URL]');
				break;
			default:
				textareaInsertTag(document.getElementById(id), value);
				break;
			}
		}
	}

	function insertTextPattern(id, textId) {
		var textPattern = {
			0: 'Das ist ein Text.',
			1: 'irgendwas',
			2: 'mal was anderes',
			3: '<strong><titel></strong>',
			4: '<br><br>'
		};

		if (id && textId !== undefined && textPattern[textId]) {
			textareaInsertTag(document.getElementById(id), textPattern[textId]);
		}
	}

	function clearTextarea(id, textId) {
		var node,
			matches = {
				0: 'Bitte geben Sie eine Beschreibung ein.',
				1: 'Bitte geben Sie die Spezifikationen ein.'
			};

		if (id && textId !== undefined && matches[textId]) {
			node = document.getElementById(id);
			if (node.value.match(new RegExp(matches[textId], 'g'))) {
				node.value = '';
			}
		}
	}

	window.onload = function () {
		var i;

		for (i = 0; i < document.forms.length; i += 1) {
			document.forms[i].reset();
		}
	};
	</script>
</head>

<body>
	<form name="formular" >
		<p>
			<textarea id="beschreibung_de" name="beschreibung_de" class="message" cols="100" rows="10"
				onfocus="clearTextarea(this.id, 0);"
				onclick="clearTextarea(this.id, 0);">Bitte geben Sie eine Beschreibung ein.</textarea>
		</p>
		<p>
			<input type="button" value="B" onclick="insertBBCODE('beschreibung_de', this.value);">
			<input type="button" value="I" onclick="insertBBCODE('beschreibung_de', this.value);">
			<input type="button" value="U" onclick="insertBBCODE('beschreibung_de', this.value);">
			<input type="button" value="FONT" onclick="insertBBCODE('beschreibung_de', this.value);">
			<input type="button" value="URL" onclick="insertBBCODE('beschreibung_de', this.value);">
		</p>
		<p>
			<input type="button" value="Das ist ein Text." onclick="insertTextPattern('beschreibung_de', 0);">
			<input type="button" value="irgendwas" onclick="insertTextPattern('beschreibung_de', 1);">
			<input type="button" value="mal was anderes" onclick="insertTextPattern('beschreibung_de', 2);">
			<input type="button" value="<strong><titel></strong>" onclick="insertTextPattern('beschreibung_de', 3);">
			<input type="button" value="<br><br>" onclick="insertTextPattern('beschreibung_de', 4);">
		</p>
		<p>
			<input type="button" value="#0000" onclick="insertBBCODE('beschreibung_de', 'Nummer 0000');">
			<input type="button" value="#0001" onclick="insertBBCODE('beschreibung_de', 'Nummer 0001');">
			<input type="button" value="#0002" onclick="insertBBCODE('beschreibung_de', 'Nummer 0002');">
			<input type="button" value="#0003" onclick="insertBBCODE('beschreibung_de', 'Nummer 0003');">
			<input type="button" value="#0004" onclick="insertBBCODE('beschreibung_de', 'Nummer 0004');">
		</p>
	</form>
</body>
</html>
 
Erneutes Dankeschön, schon ein stück weiter aber noch nicht ganz am ziel,

@dbarthel "UPDATE: Einfügen kann man die schon, aber nur wie einen Text, der Inhalte des Textareas wird nicht entsprechend formatiert!"
das macht nichts, da alles was ich da reinschreibe als Quelltext in der datenbank gespeichert wird und wenn es später in die seite geladen ist, ist es formatiert :)

nur funktioniert das jetzt ...Aber nur für eine Textarea
weil überall wird ja fix die ID oder Name der einen Textarea hinterlegt. ich will aber für beide Textareas ein und den selben button benutzen.
also muss die funktion erkennen welches die zuletzt aktive bzw aktuell aktive Textarea ist in der ich den text einfügen will.

So dürfte wie im Beispiel von miniA4kuser auch nicht
Code:
<input type="button" value="B" onclick="insertBBCODE('beschreibung_de', this.value);">
beschreibung_de stehen da ich mich damit ja ausschließlich auf die textarea beschreibung_de beziehe, was ist mit der textarea "beschreibung_en" dort soll er ja ebenso funktionieren...
das ist noch der punkt wo es hakt...
so müssten die textareas beim "onclick" einer variable ihre ID oder Namen zuordnen und beim Einfügen Button müsste ich dann diese Variable abfragen,
nur vermag ich das nicht in ein funktionierenden Code zu verfrachten...

Danke & Danke & Gruß
 
Dann ersetze doch "beschreibung_en" durch "this.id" um nach der ID der Box zu selektieren.
Natürlich muss die Texttbox dann auch eine eindeutige ID haben und der Event
Code:
onclick="insertBBCODE (this.id, this.value) "

müsste dann direkt an die Textbox.

Wie man da einen zentralen Knopf schaffen könnte, muss ich selbst erstmal probieren.
 
Zuletzt bearbeitet:
Code:
<textarea id="beschreibung_de" name="beschreibung_de"  onFocus="ta=this.name" onClick="ta=this.name"></textarea>
<textarea id="beschreibung_en" name="beschreibung_en"  onFocus="ta=this.name" onClick="ta=this.name"></textarea>

und dann beim button abfragen welcher name in der Variablen "ta" steht

Dann vielleicht noch ein Variablen Array mit den einzufügenden Texten

Code:
var textPattern = {
			0: 'Das ist ein Text.',
			1: 'irgendwas',
			2: 'mal was anderes',
			3: '<strong><titel></strong>',
			4: '<br><br>'
		};

und dann mit dem button einfügen

Code:
<input type="button" value="mal was anderes" onclick="insertTextPattern('ta', 2);">

so hatte ich mir den aufbau gedacht.

aber da ist noch dieser unterschied zwischen theorie und praxis ...
 
Hehe, hab eine Lösung gefunden.

Du kannst dir mit Hilfe von onFocus () am jeweiligen Textarea eine Funktion bauen, die entweder mittels documents.getElementsById oder mittels .append (falls jquery) die entsprechende .click Funktion, die dann Minis Funktion, mit der übergeben Id aufruft, an den Button ranbaut.

Da du ja keinen vorgekauten Code wolltest, kannst du dir den erstmal selbst überlegen.

- - - Aktualisiert - - -

Dein Code oben ändert doch aber den Inhalt der Box, nicht das Ziel.
Du müsstest ja dann entweder mit "beschriebung_de" oder "_en" arbeiten.
 
Code:
<textarea id="beschreibung_de" name="beschreibung_de"  onFocus="ta=this.name" onClick="ta=this.name"></textarea>
<textarea id="beschreibung_en" name="beschreibung_en"  onFocus="ta=this.name" onClick="ta=this.name"></textarea>

und dann beim button abfragen welcher name in der Variablen "ta" steht
Das kann aber nur funktionieren, wenn deine Einfügefunktion auch mit dem Namen der Textarea arbeitet. Wenn du jedoch die ID, wie in meinem letzten Beispiel, benötigst, dann musst du die ID speichern. Auch wenn ich kein Freund von globalen Variablen bin:
Code:
<textarea id="beschreibung_de" name="beschreibung_de"  onFocus="ta=this.id" onClick="ta=this.id"></textarea>
<textarea id="beschreibung_en" name="beschreibung_en"  onFocus="ta=this.id" onClick="ta=this.id"></textarea


Dann vielleicht noch ein Variablen Array mit den einzufügenden Texten

Code:
var textPattern = {
			0: 'Das ist ein Text.',
			1: 'irgendwas',
			2: 'mal was anderes',
			3: '<strong><titel></strong>',
			4: '<br><br>'
		};

und dann mit dem button einfügen

Code:
<input type="button" value="mal was anderes" onclick="insertTextPattern('ta', 2);">
So übergibst du aber einen String (Zeichenkette) mit dem Wert ta und nicht den Inhalt deiner globalen Variable ta. Dafür müssen die einfachen Anführungszeichen weg:
Code:
<input type="button" value="mal was anderes" onclick="insertTextPattern(ta, 2);">


so hatte ich mir den aufbau gedacht.

aber da ist noch dieser unterschied zwischen theorie und praxis ...
Regeln und Eigenschaften beachten, dann klappts auch mit der Praxis...

- - - Aktualisiert - - -

Hehe, hab eine Lösung gefunden.

Du kannst dir mit Hilfe von onFocus () am jeweiligen Textarea eine Funktion bauen, die entweder mittels documents.getElementsById oder mittels .append (falls jquery) die entsprechende .click Funktion, die dann Minis Funktion, mit der übergeben Id aufruft, an den Button ranbaut.

Da du ja keinen vorgekauten Code wolltest, kannst du dir den erstmal selbst überlegen.
Wieso so kompliziert? Bei meinem Beipiel wird doch onfocus und onclick auf die textarea gebunden. Die aufgerufene Funktion clearTextarea(id, textId) {...} bekommt die ID bereits. Diese kann die übermittelte ID ja im Gedächtnis behalten und die andere Funktion kann diese dann abfragen:<input type="button" value="B" onclick="insertBBCODE(clearTextarea.destId, this.value);">


Dein Code oben ändert doch aber den Inhalt der Box, nicht das Ziel.
Du müsstest ja dann entweder mit "beschriebung_de" oder "_en" arbeiten.
Welche Box meinst du denn jetzt? Und was meinst du mit Ziel?
 
Zuletzt bearbeitet:
@miniA4kuser:

Zum Zeitpunkt meines Postings kannte ich deinen Code ja noch nicht.
Ausserdem kann ich nur versuchen zu helfen, soweit das meine eigenen Kenntnisse zulassen, und genau darsuf passierend, habe ich dem TE geraten.
Das gute an diesem Forum ist ja, es passiert auf einer Gemeinschaft, im Idealfall gibt es, wie hier also mehrere Empfehlungen, aus denen der TE auswählen kann.

Die Bemerkung mit der Box bezog sich auf Code vom TE.
 
Zum Zeitpunkt meines Postings kannte ich deinen Code ja noch nicht.
Okay... ich dachte das bezog sich auf
... die dann Minis Funktion, mit der übergeben Id aufruft, ...
War mir nicht klar das du eine andere meintest. Daher mein Tip: Immer als Referenz die Beitragsnummer mit angeben um verwechslungen zu vermeiden


Ausserdem kann ich nur versuchen zu helfen, soweit das meine eigenen Kenntnisse zulassen, und genau darsuf passierend, habe ich dem TE geraten.
Dagegen habe ich auch nichts gesagt. Ich hatte nur hinterfragt: Wieso so kompliziert? Bei deiner Idee wird auch eine Funktion aufgerufen so wie meine clearTextarea und dann stimmt meine weitere Ausführung ja wieder...


Das gute an diesem Forum ist ja, es passiert auf einer Gemeinschaft, im Idealfall gibt es, wie hier also mehrere Empfehlungen, aus denen der TE auswählen kann.
Daher ja auch meine Hinterfragung und Erklärung.

Nur so kann sich der Kenntnisstand von jedem erweitern lassen. Lerne ja hier auch immer wieder was dazu... ;)


Die Bemerkung mit der Box bezog sich auf Code vom TE.
Trotzdem bleibt meine Frage offen
Welche Box meinst du denn jetzt? Und was meinst du mit Ziel?
Weil ich noch immer nicht verstehe was du damit gemeint hast.
 
Dieses "die dann Minis Funktion aufruft, [...]" war auf die Funktion von dir, aus dem Post 8 bezogen.

Ich meinte dieses
Code:
var textPattern

Usw.

Das ändert ja den Inhalt der Textarea und bestimmt nicht, in welcher es angezeigt wird.

Im übrigen bitte ich zu entschuldigen, wenn ich manchmal nicht eindeutig auf Nachfragen antworte, ich bin meist vom Handy aus on, und da ist zitieren und editieren extrem mühsam.
Ausserdem muss ich manchmal auch erst verstehen, was gemeint ist und das dann doch für mich übersetzen.

Du fragst, warum do kompliziert, kann ich nicht befriedigent beantworten, war mir eben in dieser Form eingefallen und sie gesagt, kannte ja zu dem Zeitpunkt deinen Code nicht.
 
Zuletzt bearbeitet:
Dieses "die dann Minis Funktion aufruft, [...]" war auf die Funktion von dir, aus dem Post 8 bezogen.
Alles klar.


Ich meinte dieses
Code:
var textPattern

Usw.

Das ändert ja den Inhalt der Textarea und bestimmt nicht, in welcher es angezeigt wird.
Korrekt ;)


Im übrigen bitte ich zu entschuldigen, wenn ich manchmal nicht eindeutig auf Nachfragen antworte, ich bin meist vom Handy aus on, und da ist zitieren und editieren extrem mühsam.
Das geht glaube ich jedem hier so...


Ausserdem muss ich manchmal auch erst verstehen, was gemeint ist und das dann doch für mich übersetzen.
Kein Problem, bin ja selbst auch nicht perfekt. :)


Du fragst, warum do kompliziert, kann ich nicht befriedigent beantworten, war mir eben in dieser Form eingefallen und sie gesagt, kannte ja zu dem Zeitpunkt deinen Code nicht.
Das bezog sich darauf zu verstehen wie du darauf gekommen bist bzw. was der Hintergrund für diese Idee gewesen ist. Manchmal geht es mir ja selbst auch so, das ich bei gewissen Problemstellungen einfach mal zu kompliziert denke und bei einer Hinterfragung meines Gedankens erst dann der berühmte Groschen fällt und ich dabei unter Umständen sogar noch etwas hinzugelernt habe.


PS: Sollte jetzt keine Breitseite gegen dich werden, wollte einfach nur ein paar Sachen hinterfragen und Kommentieren.
 
Zurück
Oben