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

[FRAGE] Wie lassen sich Textbausteine in ein Textfeld einfügen

nacketti

New member
Eigentlich will ich einige Formeln in eine Datenbank implementieren. Die Formeln sind abhängig von Parametern, die bereits vorhanden sind. Ich will also ein Dropdown mit allen Parametern, die dann per anklicken in das Textfeld geladen werden ()Bezeichnung ist etwas komplex). Das ist hier aber gar nicht das Problem bzw. so weit bin ich noch nicht. Probleme macht mir das Einfügen per onChange="insert()", da das irgendwie nicht funktioniert und ich partout nicht den Fehler finden kann. Hier mein bisheriger Code:
HTML:
<script type="text/javascript">
function insert(form,field,what)
 {
  if (document.forms[form].elements[field].createTextRange)
   {
    document.forms[form].elements[field].focus();
    document.selection.createRange().duplicate().text = what;
   }
  else if ((typeof document.forms[form].elements[field].selectionStart) != 'undefined') // für Mozilla
   {
    var tarea = document.forms[form].elements[field];
    var selEnd = tarea.selectionEnd;
    var txtLen = tarea.value.length;
    var txtbefore = tarea.value.substring(0,selEnd);
    var txtafter =  tarea.value.substring(selEnd, txtLen);
    var oldScrollTop = tarea.scrollTop;
    tarea.value = txtbefore + what + txtafter;
    tarea.selectionStart = txtbefore.length + what.length;
    tarea.selectionEnd = txtbefore.length + what.length;
    tarea.scrollTop = oldScrollTop;
    tarea.focus();
   }
  else
   {
    document.forms[form].elements[field].value += what;
    document.forms[form].elements[field].focus();
   }
 }
</script>

<html>
<body>
<form id="vorlage_form" action="" method="post"><div>
<textarea rows="1" cols="70" id="vorlage_textarea"></textarea></td> 
<select   onChange="insert(this.options[this.selectedIndex].value);" class="bb_button_dropdown" title="parameter">
<option   value="'vorlage_form','vorlage_textarea','1'">1</option>
<option   value="'vorlage_form','vorlage_textarea','2'">2</option>
<option   value="'vorlage_form','vorlage_textarea','3'">3</option>
<option   value="'vorlage_form','vorlage_textarea','4'">4</option></select>
</div></form>
</body>
</html>
 
Oh, das td war noch ein Überbleibsel, da ich das ganze erst als Tabelle formatiert hatte. Links Textfeld und rechts Buttons. Ist aber für das Problem irrelevant.
Ich fürchte, dass der Value nicht richtig übergeben wird, da es funktioniert, wenn ich statt des (this.options...) direkt einen der values dort einsetze. Drei Parameter sind auch vorhanden:
1: 'vorlage_form'
2: 'vorlage_textarea'
3: '1', '2', '3' oder '4'
 
Drei Parameter sind auch vorhanden:
1: 'vorlage_form'
2: 'vorlage_textarea'
3: '1', '2', '3' oder '4'
Äh... nein.

An die Funktion insert() wir dnur ein Parameter mit dem Wert "'vorlage_form','vorlage_textarea','1'" (also alles zusammen als String) übergeben.

Aber die Textarea in der Funktion über den Formularnamen und den Textareanamen zu referenziern macht sie nur unflexibel:
Code:
<!DOCTYPE html>
<html>
	<head>
		<title></title>
		<script>
		function insert(textarea, what){
			if (textarea.createTextRange){
				textarea.focus();
				document.selection.createRange().duplicate().text = what;
			}
			else if ((typeof textarea.selectionStart) != 'undefined'){ // für Mozilla
				var selEnd = textarea.selectionEnd;
				var txtLen = textarea.value.length;
				var txtbefore = textarea.value.substring(0,selEnd);
				var txtafter =  textarea.value.substring(selEnd, txtLen);
				var oldScrollTop = textarea.scrollTop;
				textarea.value = txtbefore + what + txtafter;
				textarea.selectionStart = txtbefore.length + what.length;
				textarea.selectionEnd = txtbefore.length + what.length;
				textarea.scrollTop = oldScrollTop;
			}
			else {
				textarea.value += what;
			}
			textarea.focus();
		}
		</script>
	</head>
	<body>
		<form action="" method="post">
			<textarea rows="1" cols="70" name="vorlage_textarea"></textarea>
			<select onchange="insert(this.form.vorlage_textarea, this.value);this.value = '';" class="bb_button_dropdown" title="parameter">
				<option selected></option>
				<option value="1">1</option>
				<option value="2">2</option>
				<option value="3">3</option>
				<option value="4">4</option>
			</select>
		</form>
	</body>
</html>

PS: dein HTML war massiv invalide. Hab' das mal alles repariert.
PPS: es heißt onchange.
PPPS: Elemente in einem Form brauchen einen Namen, damit sie abgesendet werden, und keine ID.
 
Zurück
Oben