Formularname und Feldname bzw. Name des Steuerelements rausfinden?

Jerinca

Erfahrenes Mitglied
Hallo Leute!

Ich hoffe, das ist eine einfache Frage für Euch:

Wie kann ich mittels Javascript den Namen des Formulars und des Steuerelements auf einer ASP-Site rauskriegen/rausfinden/auslesen), über das die Funktion aufgerufen wurde?

Hintergrund ist der, daß ich auf einer ASP-Site mehrere Formulare habe und in diesen sind jeweils mehrere Textareas (genauer: 6), aus denen heraus die gleiche Funktion aufgerufen werden soll, nur eben mit unterschiedlichen Werten drin.

Also, je nach dem, welche Textarea in welchem Formular fokussiert wird, soll natürlich mit genau dieser Area etwas passieren!

Jetzt dachte ich mir, daß es ja blöd ist, 6 mal die gleiche Funktion zu schreiben... Vielmehr möchte ich am Anfang der Funktion rausfinden, wie das Formular und die Textarea heißt und das dann in eine Variable packen und dann damit weiterarbeiten.

So könnte ich viel Speicherplatz sparen und es sieht auch professioneller aus ;-)

Als Anschauungsobjekt hier mal zwei der 6 Funktionen, damit Ihr seht, was ich meine:
Code:
<script language="JavaScript">
	function FT_beschreibung_zaehlen(e) {
		var max = 100;
		document.form3b.zaehler.value = max;
		document.form3b.FT_beschreibung.focus();
		keyCode = event.keyCode;
	if (document.form3b.FT_beschreibung.value.length<max+1) {
		document.form3b.zaehler.value = max-document.form3b.FT_beschreibung.value.length;
		}
	else {
		document.form3b.FT_beschreibung.value = document.form3b.FT_beschreibung.value.substring(0,max);
		document.form3b.zaehler.value = 0;
		}
	}
</script>
Code:
<script language="JavaScript">
	function FT_notiz_zaehlen(e) {
		var max = 255;
		document.form3b.zaehler2.value = max;
		document.form3b.FT_notiz.focus();
		keyCode = event.keyCode;
	if (document.form3b.FT_notiz.value.length<max+1) {
		document.form3b.zaehler2.value = max-document.form3b.FT_notiz.value.length;
		}
	else {
		document.form3b.FT_notiz.value = document.form3b.FT_notiz.value.substring(0,max);
		document.form3b.zaehler2.value = 0;
		}
	}
</script>

Wie Ihr sehen könnt: Es ist alles gleich bis auf Formular- und Steuerelementname und die Variable "max"!

Danke schonmal für Eure Mühen!

Grüßle, Jerinca
 

xthetronx

Erfahrenes Mitglied
Hi Jerinca,

ich weiss nicht ob es Dir hilft, aber ich habe letztens ein ähnliches Problem gehabt.

Und zwar können bei mir, 'n' mögliche Selectboxen erzeugt werden, bei welchen ich auch den Inhalt auslesen muss.

Ich habe dieses Problem mit 'getElementByName()' gelöst.

Hier die Funktion im JavaScript
Code:
function suche(selectID){
	size = document.getElementsByName("SB_Select")[selectID].value;
	location.href = 'seite.php?size='+size+''';
}

Code:
<select name="SB_Select"  id="<? echo $i ?>" onChange="javascript:suche(<? echo $i ?>)">
<option value="1">Inhalt</option>
<option value="2">Inhalt</option>
</select>

$i ist bei mir dann einfach eine Variable, welche ich hochzählen lasse. So bekommt jede Selectbox ihre eigene ID.

Gruß

Torsten
 

Jerinca

Erfahrenes Mitglied
Hallo Torsten!

Danke für Deine Antwort! Vielleicht kannst Du mir noch ein bißchen weiterhelfen...

Bei mir steht die Anzahl der Felder (Textareas) bereits fest und die Namen sind vergeben (eindeutig). Deswegen brauche ich keine Variable hochzählen.

Mein Problem ist jetzt, daß ich nicht weiß, wie und wo ich in die bestehende JavaScript-Funktion einbauen muß, daß ermittelt werden soll, welches Feld gerade aktiviert worden ist (siehe meine 2 Beispielfunktion aus dem ersten Post).

Zur Erklärung: Die Funktion dient einfach nur dazu, eine Textarea zu begrenzen, d.h., es wird eine Nummer hochgezählt bei jedem Tastendruck bis eine festgelegte Zahl erreicht ist, dann ist Finito. Das muß man leider bei Textareas so machen, weil's bei denen leider kein "maxlength" gibt :mad:

Ja, und diese Funktion wird eben bei mehreren Textareas benötigt.

Ich denke, irgendwo am Anfang dieser Funktion müßte jetzt noch was rein, daß besagt: "Schau zuerst, welche Textarea gerade aktiviert ist und bearbeite dann diese weiter".

Das ist - glaube ich - eine etwas andere Lage als bei Deinem Link, oder?

Kannst Du mir trotzdem mit einem Tipp oder einer Anregung weiterhelfen? Oder sonst jemand?

Danke, Jerinca
 

xthetronx

Erfahrenes Mitglied
Hallo Jerinca,

ich habe Dir mal ein Beispiel für eine statische Webseite gemacht, solltest Du aber auch für Deine Zwecke umgestalten können.
So wird jedes Textarea seperat gezählt, müsste man jetzt nur noch schauen, wie man die Zeichenanzahl sinnvoll begrenzt.
Weiss ich jetzt auf Anhieb nicht, müsste ich sonst noch bei Bedarf mal nachschauen.

Ich hoffe es hilft Dir trotzdem schon mal ein bisschen weiter.

Gruß

Torsten

Code:
<script language="javascript">
function Aktualisieren(id){
	zaehler = document.getElementsByName("TF_Counter")[id].value = document.getElementsByName("TF_Eintrag")[id].value.length +1;
}
</script>

Code:
 <table width="400" cellpadding="1" cellspacing="1">
	<tr>
		<td><textarea cols="10" rows="10" name="TF_Eintrag" onFocus="Aktualisieren(0)" on onBlur="Aktualisieren(0)" onKeyDown="Aktualisieren(0)"></textarea></td>
	</tr>
	<tr>
		<td><input type="text" size="3" name="TF_Counter" value="0"></td>
	</tr>
	<tr>
		<td><input type="text" size="90" name="TF_Eintrag" maxlength="94" value="" onFocus="Aktualisieren(1)" on onBlur="Aktualisieren(1)" onKeyDown="Aktualisieren(1)"></input></td>
	</tr>
	<tr>
		<td><input type="text" size="3" name="TF_Counter" value="0"></td>
	</tr>
</table>
 

Jerinca

Erfahrenes Mitglied
Hallo Torsten!

Vielen lieben Dank schonmal für Deine Mühe mit dem Beispiel, aber wir haben wohl aneinander vorbeigeschrieben:

Meine Textareas haben alle unterschiedliche Namen und liegen auch in unterschiedlichen Forms/Formularen. Das muß so sein, weil ich über diese Seite auch Einträge in mehrere Datenbank-Tabellen mache.

Ist es denn nicht möglich, sowas zu realisieren, auch wenn die Felder nicht den gleichen Namen haben?

Ich habe jetzt mal meine Funktionen, die ja alle - wie gesagt - gleich gestrickt sind und nur ein paar unterschiedliche Werte beinhalten, so umgemodelt, wie ich es mir vorstellen würde:
Code:
<script language="JavaScript">
	function zaehlen(e) {
	var textarea;
	var max;
	var zaehler;
	switch(textarea) {
		case "document.form2b.Rep_notiz":
			textarea = document.form2b.Rep_notiz;
			max = 255;
			zaehler = document.form2b.zaehler5.value;
			break;
		case "document.form3b.FT_beschreibung":
			textarea = document.form3b.FT_beschreibung;
			max = 100;
			zaehler = document.form3b.zaehler.value;
			break;
		case "document.form3b.FT_notiz":
			textarea = document.form3b.FT_notiz;
			max = 255;
			zaehler = document.form3b.zaehler2.value;
			break;
		case "document.form4b.FF_beschreibung":
			textarea = document.form4b.FF_beschreibung;
			max = 100;
			zaehler = document.form4b.zaehler3.value;
			break;
		case "document.form4b.FF_notiz":
			textarea = document.form4b.FF_notiz;
			max = 255;
			zaehler = document.form4b.zaehler4.value;
			break;
		}	
		zaehler = max;
		textarea.focus();
		keyCode = event.keyCode;
	if (textarea.value.length<max+1) {
		zaehler = max-textarea.value.length;
		}	
	else {
		textarea.value = textarea.value.substring(0,max);
		zaehler = 0;
		}
	}
Jede Textarea hat nämlich ein onkeyup="zaehlen(event)" und einen hidden zaehler mit dem Eventhandler onFocus="if(this.blur){this.blur();}"

Ich weiß, daß es so nicht klappt, schon klar, aber vom Prinzip her sollte es doch funktionieren, wenn ich es nur schaffe, am Anfang die Variable "textarea" richtig zu bestimmen, oder?

Ich denke, statt "var textarea;" müßte was stehen wie "var textarea = get_alle_Textareas_auf_dieser_Seite;". Dann könnte das switch auch greifen usw.

Kennst Du vielleicht so einen Befehl, wo ich das rausfinden könnte?

Bis dann, Jerinca
 

Jerinca

Erfahrenes Mitglied
Hallo Torsten und alle, die es interessiert!

Ich bin jetzt endlich dahinter gekommen, wie man ganz leicht herausfinden kann, welches Steuerelement eine Funktion aufgerufen hat:

Man gibt jedem Steuerelement (das man weiterverarbeiten möchte) eine eindeutige ID (z.B. die gleiche wie der Name, kann aber auch etwas anderes sein, es muß eben nur eideutig sein ;) ) und ruft diese ID dann in der Funktion über event.srcElement.id auf, was ich bei switch gemacht habe:
Code:
<script language="JavaScript">
	function zaehlen(e) {
	var textarea;
	var max;
	var zaehler;
	switch(event.srcElement.id) {
		case "Rep_notiz":
			textarea = document.form2b.Rep_notiz;
			max = 255;
			zaehler = document.form2b.zaehler5.value;
			break;
		case "FT_beschreibung":
			textarea = document.form3b.FT_beschreibung;
			max = 100;
			zaehler = document.form3b.zaehler.value;
			break;
		case "FT_notiz":
			textarea = document.form3b.FT_notiz;
			max = 255;
			zaehler = document.form3b.zaehler2.value;
			break;
		case "FF_beschreibung":
			textarea = document.form4b.FF_beschreibung;
			max = 100;
			zaehler = document.form4b.zaehler3.value;
			break;
		case "FF_notiz":
			textarea = document.form4b.FF_notiz;
			max = 255;
			zaehler = document.form4b.zaehler4.value;
			break;
		}	
		usw. usw. usw.
	}	
</script>
Im HTML-Body sieht's dann bei der ersten Textareas und - analog dazu auch bei allen anderen - so aus:
Code:
<textarea name="Rep_notiz" id="Rep_notiz" onkeyup="zaehlen(event)"  STYLE="width:100%"></textarea>
<input type="hidden" name="zaehler5" onFocus="if(this.blur){this.blur();}">
Nochmal zur Erklärung: Über eine vergebene ID und den Befehl event.srcElement.id wird herausgefunden, welches Element auf der ASP-Site das Event bzw. die Funktion ausgelöst hat!

Vielen Dank an alle, die sich Gedanken gemacht haben :p

Grüßle, Jerinca
 

Neue Beiträge