Eventhandler in dynamisch erzeugten Feldern (Internet Explorer)
schmank
- javascript
Hallo !
Ich bin am verzweifeln. Mein letzter Strohhalm ist das Forum, bevor ich das komplette Konzept ändern muss ;-)
Also, ich erstelle dynamisch eine Textarea (Code s.u.) und will diesem Feld ein onblur-Event zuordnen um den Inhalt der Textarea direkt beim Verlassen des Feldes speichern zu können.
Im Firefox funktionert das auch wunderbar nur leider macht der IE rein gar nichts.
Mein Debugging hat bereits ergeben, dass der Eventhandler auch gesetzt wird, (Prüfung mit getAttributes) nur wird die angegebene Funktion nicht aufgerufen. (Alert in Funktion wird nicht ausgeführt)
Hier der Code(Auszug und vereinfacht):
[quote]
var input, inputname = "xy";
input = document.createElement("textarea");
td1.appendChild(input);
input.name = inputname;
input.id = inputname;
input.rows = "3";
input.size = "25";
document.getElementById(inputname).setAttribute("onblur", "javascript:insupZusElBes ()");
[quote]
PS.: Auch das direkte setzen des Eventhandlers über:
"input.onblur = ..."
oder:
"input.setAttribut("onblur", ...)"
oder:
"document.getElementById(inputname).onblur = ..."
funktioniert leider auch nicht.
Ich hoffe Ihr habt irgendeine Idee oder zumindest eine Begründung warum das nicht funktionert.
Danke.
[quote]
var input, inputname = "xy";
input = document.createElement("textarea");
td1.appendChild(input);
input.name = inputname;
input.id = inputname;
input.rows = "3";
input.size = "25";
document.getElementById(inputname).setAttribute("onblur", "javascript:insupZusElBes ()");
Das ist natürlich Unsinn, in mehrfacher Hinsicht.
Du willst lediglich einen Eventhandler zuweisen das geht genau wie die anderen Attribute auch:
input.onblur = function() {
insupZusElBes();
}
In deinem Fall kannst du sogar auf die anonyme Funktion verzichten. Dann ist in deiner Funktion this = Das Inputelement.
PS.: Auch das direkte setzen des Eventhandlers über:
"input.onblur = ..."
Du hast vermutlich versucht einen String zuzuweisen, das funktioniert nicht.
Struppi.
Hallo Struppi !
Folgendes funktioniert:
input.onblur = function (){insupZusElBes ();};
Bei "input.onblur = insupZusElBes ();" bekomme ich im IE die Fehlermeldung "nicht implementiert".
Auch wenn mir der Grund für das Verhalten bzw. die notwendige Schreibweise nicht klar ist, so kann ich jetzt wenigsten weitermachen.
Vielen Dank.
PS.: Vielleicht hast Du ja eine Erklärung ?!
Folgendes funktioniert:
input.onblur = function (){insupZusElBes ();};
Bei "input.onblur = insupZusElBes ();" bekomme ich im IE die Fehlermeldung "nicht implementiert".
Die Fehlermeldung kommt woanders her (s. u.), aber die Zuweisung ist Unsinn, ein Eventhandler erwartet eine Referenz auf eine Funktion, du rufst aber die Funktion auf und weist dem Handler den Rückgabewert der Funktion zu.
Struppi.
Hallo Struppi !
Wenn ich zuerst "input.onblur = ..." und danach "appendChild" angebe, wird der Event sofort beim laden der Seite ausgeführt.
Das sollte natürlich auch nicht sein und war bei Deiner vorhergehenden Lösung, die aus nicht erklärlichen Gründen bei mir funktioniert, nicht der Fall.
Falls Du hier auch noch einen Ansatz hättest ... wow.
Vielen Dank im voraus.
Wenn ich zuerst "input.onblur = ..." und danach "appendChild" angebe, wird der Event sofort beim laden der Seite ausgeführt.
Nicht wenn du es so machst wie ich es dir gezeigt habe,
Struppi.
Wenn ich zuerst "input.onblur = ..." und danach "appendChild" angebe, wird der Event sofort beim laden der Seite ausgeführt.
Nicht wenn du es so machst wie ich es dir gezeigt habe,
Struppi.
Hallo Struppi !
Sorry, aber ich komm nicht dahinter. Ist es evtl. möglich mir nochmal zu zeigen, was Du mir gezeigt hast ;-)
Danke
Sorry, aber ich komm nicht dahinter. Ist es evtl. möglich mir nochmal zu zeigen, was Du mir gezeigt hast ;-)
Auch wenn's Absurd ist, aber bitte:
https://forum.selfhtml.org/?t=163897&m=1067601
Struppi.
Hi,
Wenn ich zuerst "input.onblur = ..." und danach "appendChild" angebe, wird der Event sofort beim laden der Seite ausgeführt.
Dann hast du hoechstvermutlich immer noch den Rueckgabewert der aufgerufenen Funktion zugewiesen, statt der Referenz auf die Funktion.
MfG ChrisB
Hi,
Wenn ich zuerst "input.onblur = ..." und danach "appendChild" angebe, wird der Event sofort beim laden der Seite ausgeführt.
Dann hast du hoechstvermutlich immer noch den Rueckgabewert der aufgerufenen Funktion zugewiesen, statt der Referenz auf die Funktion.
MfG ChrisB
Hallo Chris !
Vielen Dank, jetzt wirds heller. Wenn Du mir jetzt noch sagen könntest wie ich eine Referenz auf die Funktion erstelle, wäre ich Dir sehr dankbar.
Vielen Dank, jetzt wirds heller. Wenn Du mir jetzt noch sagen könntest wie ich eine Referenz auf die Funktion erstelle, wäre ich Dir sehr dankbar.
Auch das hab ich dir bereits gezeigt.
https://forum.selfhtml.org/?t=163897&m=1067601
Entweder übner eine anonyme Funktion
onblur = function() {}
oder
onblur = deineFunktion;
Struppi.
var input, inputname = "xy";
input = td1.appendChild(document.createElement("textarea"));
input.name = inputname;
input.id = inputname;
input.rows = "3";
input.size = "25";
input.onblur=insupZusElBes;
sollte funktionieren.
Hallo noscript !
Dein Vorschlag endet im IE mit der Fehlermeldung:
"Nicht implementiert"
(Im FF klappts ;-)
Trotzdem Danke.
Dein Vorschlag endet im IE mit der Fehlermeldung:
"Nicht implementiert"
Du darfst das Element erst hinzufügen, nachdem du alle Attribute zugewiesen hast, da dieser das type Attribut nicht nachträglich ändern kann.
Struppi.