JS Funktionszuweisung mit variablen Variablen
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
besagten element
code
dynamisch erstellen
dynamisch erzeugen
element
feld
frage
funktion
funktionieren
gleiche gedanke
http
input
problem
sackgasse
schleife
super danke
typ
url
weiteres gehen
wert auslese
-
Hi
ich möchte in JS eine Funktion schreiben, die jedem input Feld eine onFocus Funktion anlegt. (das ganze läuft in einer Schleife)
in dieser onFocus Funktion soll eine Variable stehen, die den Typ 'value' dieses Feldes enthält.
Ich müsste also quasi Javascriptcode mit Javascript generieren. geht das?
/* field = input Object Array*/ [..] var x = field[i].getAtribute('value'); field[i].onfocus = function() { var y = x; /* y soll den zuvor ausgelesenen Wert zugewiesen bekommen und bei onfocus mit diesem deklariert werden */ [..] } [..]
Ich hoffe Ihr könnt mir weiterhelfen,
LF -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo!
Besser wärs hier, die Funktion seperat zu definieren und in der Schleife dann jeweils den Elementen zu zu ordnen:
function onFocus() { ... } for (...) { ... field[i].onfocus = onFocus; ... }
Noch einfach wärs mit jQuery, da würde das hier schon reichen:
$("input").on("focus", function () { ... });
Lg -
Das Problem ist allerdings, das die 'onfocus' Funktion für jedes Inputfeld anderst aussieht, und ich
1) nicht weiss welchen Wert x hat
2) nicht weiss wie viele Inputfelder es gibt denen eine Funktion zugewiesen wird
Die Funktion muss ich daher dynamisch erstellen und dann zuweisen.
Zur JQuery Variante:
Wo genau ist jetzt der Vorteil?
Wie ich allen inputfeldern eine Funktionzuweise kann ich ja problemlos, das Problem liegt darin, die Funktion die zugewiesen wird mit 'übergeordneten Variablen' zu 'bauen'.
LG -
Du könntest doch wenn es echt sein muss mit eval deine Funktion dynamisch erstellen... dann kannst du deine übergeordneten Variablen einbauen wie du willst.
-
Ich verstehe das Problem leider nicht. Willst du einfach nur allen input Elementen eine onFocus funktion hinzufügen? Das ginge so:
eList = document.getElementsByTagName("input"); for ( e in eList ) { e.onfocus = function(event) { y = this.value; } }
Das sollte an sich gehen, wenn es nicht geht dann halt so:
eList = document.getElementsByTagName("input"); for ( i=0 ; i < eList.length ; i++ ) { eList[ i ].onfocus = function(event) { y = this.value; } }
Sollte an sich ohne weiteres gehen, und wäre in meinen augen das einfachste. Sollte in allen Browsern funktionieren, bis zurück zum IE6, grundsätzlich sollte es auch im IE5.5 funktionieren, dafür geb ich aber keine garantie.
Liebe Grüße
Beitrag zuletzt geändert: 14.7.2012 20:41:18 von ggamee -
Also nochmal zur Problemklärung:
Ich weiss wie ich jedem besagten Element eine onFocus Funktion zuweise.
Ich möchte aber erst einen wert auslesen, und diesen Wert dann in die Funktion schreiben und beim nächsten Element wieder erst auslesen dann schreiben.
Das Problem ist aber, dass ich in meiner for schleife, die über alle Elemente iteriert einen Wert auslese und diesen in eine Variable (x)
speicher. in der OnFocus funktion möchte ich nun diesen ausgelesenen Wert (x) verwenden können.
LG -
Hi,
ich denke schon, dass ich das Problem verstanden habe. Allerdings ist der Weg den du einschlagen willst eine Sackgasse.
Was passt hieran nicht?
Das ist zwar nicht so wie du es machen wolltest, führt aber zum gleichen Ergebnis: Der Wert value ist in der Funktion onfocus verfügbar und zwar passend zu jedem Element field(i).
Nach dem was du bisher geschrieben hast, ist es nicht erforderlich den Wert fest in die Funktion zu schreiben.Und nach dem was ich weiß, ist es nicht möglich eine Funktion dynamisch zu erstellen. Es ist immer ein Umweg über z.B. ein Attribut erforderlich.
Edith: Muß mich korrigieren, es würde z.B. so funktionieren:
Habe ich mit einer bekannten Suchmaschine für dich hier gefunden.document.getElementById(i).onfocus = new Function("fx", "var y ="+x);
Gruß
Beitrag zuletzt geändert: 17.7.2012 21:23:46 von bandi999 -
Super danke! Das läuft.
Ich frage mich jedoch warum eval das nicht leistet, weil dainter doch der gleiche Gedanke (code dynamisch erzeugen) steht.
Liebe Grüße
-
programtools schrieb:
Weil eval den Code sofort ausführt... dort müsstest du wieder onirgendwas = function() { dynamischer Code; }; schreiben was aufs gleich hinausläuft.
Super danke! Das läuft.
Ich frage mich jedoch warum eval das nicht leistet, weil dainter doch der gleiche Gedanke (code dynamisch erzeugen) steht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage