objectnamen dynamisch definieren

sadi

Mitglied
Hallo auch,
ich möchte in einem Formularfeld in dem einen Feld etwas eingeben und in einem anderen Feld soll zeitgleich etwas von der Eingabe abhängiges ausgegeben werden. Ich habe dafür testweiese eine JavaScript Funktion geschrieben, welche das bei statischen Formularen wunderbar erledigt. Um auf die Feldwerte zugreifen zukönnen nutze ich die Objekthierarchie von JavaScript in der Form:

Formularname.FeldID.value

Mein eigentliches Vorhaben besteht darin ein nicht-statisches Formular zuverwenden. Das bedeuet das in einer Tabelle für jede Zeile, welche einen Datensatz darstellt, ein Formular angelegt wird mit einem bestimmten Formularnamen und FeldID's. Da ich hier die Lösung mit der Objekthierarchie ebenfalls verwenden würde, besteht das Problem wie ich den Namen des Formulars in einer Funktion als Objektnamen verwenden kann.

Gruß

Sascha
 
Hi,

möglicherweise hilft Dir die eval()-Funktion weiter, die auch Objektreferenzen zurückgibt.

Wenn die Bezeichner der Formularelemente bzw. der Formulare bekannt sind, bekommst Du die Referenzen auch mit document.getElementById(Objektname).

Gruß
 
omg, wieso gleich eval?

Der Befehl ist zwar nicht gefaehrlich, wie z.B. bei PHP, aber trozdem find ich's uebertrieben, fuer jeden kleinen (pardon) Sch** eval zu benutzen...

Vor allem, wenn's auch viel einfacher geht:
Code:
sForm  = 'Formular1';
sField = 'Feld2';

window.alert(window.document.forms[sForm].elements[sField].value);

$0.02

Edit:
document.getElementById(Objektname)
id != name
Und ausserdem soll's auch Leute geben, die keinen Internet Explorer benutzen.
 
Zuletzt bearbeitet von einem Moderator:
ok, da bin ich mit ID und Name durcheinandergeraten. Allerdings ist mir neu, dass getElementById und getElementByName nur im IE funktionieren sollen.
aus meiner Referenz:
Die Methode getElementById wird [...] im InternetExplorer 5.x, Netscape 6, Mozilla 0.6, Opera 4 und 5 unterstützt. [...]
Ok, für ältere Browser mag das nicht geeignet sein, aber die Funktion entspricht zumindest dem W3C-Standart.

Gruß

P.S.: eval() ist natürlich Overkill, das gebe ich zu.
 
Allerdings ist mir neu, dass getElementById und getElementByName nur im IE funktionieren sollen.
Sorry, mein Fehler.
Ich war davon ausgegangen, dass das mit dem getElementById<->getElementByName keine Verwechslung war.
Und so weit ich weiss, geht getElementById im IE auch, wenn nur ein name-Attribut vorhanden ist.
Code:
<input type="text" name="foo" />
<input type="button" onclick="window.alert(window.document.getElementById('foo').value);" value=" Wert anzeigen " />
<!-- funktioniert im IE -->
 
ich mal so einiges ausprobiert was ihr mir vorgeschlagen habt. Entweder es funktioniert nicht so wie ich es möchte oder ich bin zu doof. Ich habe mal meinen tescode hier aufgeführt und möchte nocheinmal darauf hinweisen, dass ich an den id namen des feldes heranmöchte. Der ist zwar in diesen Beispiel (eingabe2) bekannt, aber in meinem eigentlichen Programm eben nicht.

Vielen Dank schonmal für eure Hilfe.

Code:
<html>
<head>
<SCRIPT language="JavaScript">

function update(b) {
	
	document.testform.ausgabe.value = document.testform.elemnts[b].value *1.16;
			
}

</SCRIPT>
</head>
<BODY>
<FORM name="testform" action="test.txt" method="post">
<INPUT type="text" id="eingabe2" name="netto" onKeyUp="JavaScript: update(eingabe2);" />
<INPUT type="text" id="ausgabe" name="brutto" value="34"  />

</FORM>


</BODY>
</html>
 
Hi,

wenn Du die Funktion so aufrufst, kannst Du ihr auch gleich das Formular oder das aufrufende Objekt übergeben. Ein Beispiel:
PHP:
<SCRIPT language="JavaScript">
function update(theform) {
  // wenn Namen und IDs der Elemente unbekannt sind, aber
  // die Reihenfolge der Elemente im Formular gegeben ist:
  theform.elements[1].value = theform.elements[0].value * 1.6; 
}
</SCRIPT>
<BODY>
<FORM name="testform" action="test.txt" method="post">
<INPUT type="text" id="eingabe2" name="netto" onKeyUp="java script: update(this.form);" />
<INPUT type="text" id="ausgabe" name="brutto" value="34" />
</FORM>
</BODY>

Gruß
 
Ja um was geht es dir nun?
Um die id oder den Namen?

Und irgendwie klingt deine Beschreibung jetzt ganz anders als im wersten Post...

Wenn ich dich richtig verstanden habe, dann versuch's mal so:
Code:
<input type="text" id="eingabe2" name="netto" onkeyup="this.value *= 1.16;" />

<!-- oder, wenn es unbedingt eine Funktion sein muss: -->
function updateValue(a_oObj)
{
    a_oObj.value *= 1.16;
}

/*. . */
<input type="text" id="eingabe2" name="netto" onkeyup="updateValue(this);" />
Ich wuesste nicht, wozu du hier eine ID brauchst.

Auch hier wieder:
Code:
document.testform.elemnts[b ].value
Per elements greifst du auf das Element mit dem entsprechenden Namen zu, nicht der ID.

Edit:
Ah, hab nicht genau hingeschaut.
Ist natuerlich nicht das Eingabefeld, das veraendert werden soll.. :rolleyes:

Siehe Datic's Loesung mit den numerschen Indizies.
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank. Die Lösung von Datic hat mir geholfen. Das mit der Elementnummer habe ich noch nicht gewusst.
Ich möchte mich nocheinmal berichtigen und sagen, dass ich den ID Namen wollte und nicht den Elementnamen. Aber das hat sich jetzt erledigt.

Gruß
 

Neue Beiträge

Zurück