DOM: wiedermal Probleme mit DOM und MS IE
Permafrost
- javascript
0 JürgenB0 molily
hallo
ich habe ein Formular was ich mittels DOM erstellen lasse. ich gehe dabei so vor, daß ich mir die Elemente zunächst in statischem HTML baue und auf Form und Funktion teste (wie's wogl üblich ist) bevors ans DOM geht.
Ich habe Konstrukte, die wunderbar in beiden Browsern gehen:
k1_t1 = document.createTextNode("Ihr Name: ");
k1_input1= document.createElement('input');
k1_input1.setAttribute('type','text');
k1_input1.setAttribute('name','name');
Am Ende soll sowas wie <input type="button" value="Senden" onClick="javascript:send()">
stehen.
Wenn ich nun schreibe:
~~~javascript
var k4_butt = document.createElement('input'); // akzeptiert IE
k4_butt.setAttribute('type','button'); // akzeptiert
k4_arg = "javascript:Send('" + z_id + "');"; // ?
k4_butt.setAttribute('onclick',k4_arg); // NICHT akzeptiert
k4_butt.setAttribute('type','button'); // akzeptiert
k4_butt.setAttribute('value','Kommentar senden'); // akzeptiert
k4.appendChild(k4_butt); // k4 Elternknoten
zeigt IE 6 den Button zwar korrekt an, aber er ignoriert den 'onclick' Event. Es passiert einfach gar nichts. Sodaß ich auf einen `<a href="">`{:.language-html} ausweichen muss, der den Event handelt. Auf ein Element `<form>`{:.language-html} konnte ich (bisher) getrost verzichten. Es würde sowieso keine action="" enthalten und der JS Event verarbeitet korrekt alle `<input>`{:.language-html} Felder.
Fehler? gibt's einen Workaround? Muss ich vl. einen "submit" verwenden?
Nebenbei: Auch sehr nervig ist beim IE, daß er in einem DOM Element keine CSS Klasse akzeptiert:
`knoten.setAttribute('class','cssklasse')`{:.language-javascript}
sondern man muss JEDE einzelne Eigenschaft einzeln angeben:
`knoten.style.cssEigenschaft = ""`{:.language-javascript}
[hier ist eine Übersicht](http://www.mediaevent.de/javascript/DOM-Node-Style.html). Das nur als Randbemerkung.
Danke, Gruß
Hallo Permafrost,
k4_butt.setAttribute('onclick',k4_arg); // NICHT akzeptiert
schon mal
k4_butt.onclick=k4_arg;
probiert?
knoten.setAttribute('class','cssklasse')
knoten.className='cssklasse';
Gruß, Jürgen
schon mal
k4_butt.onclick=k4_arg;
probiert?
grad getestet. sowas läuft weder auf IE noch Mozilla !?
knoten.className='cssklasse';
ja das habe ich nachträglich auch erfahren. da braucht man da immernoch eine Browserunterscheidung. jetzt ist's zu spät ich habe alles einzeln definiert, aber für's nächste Projekt :)
Gruß
Hi,
k4_butt.onclick=k4_arg;
grad getestet. sowas läuft weder auf IE noch Mozilla !?
Selbstverständlich. Das läuft auf allen Browsern.
Gruesse, Joachim
k4_butt.onclick=k4_arg;
grad getestet. sowas läuft weder auf IE noch Mozilla !?
Selbstverständlich. Das läuft auf allen Browsern.
also bei mir leider nicht
k4_butt.onclick=k4_arg;
grad getestet. sowas läuft weder auf IE noch Mozilla !?
Selbstverständlich. Das läuft auf allen Browsern.
also bei mir leider nicht
Dann ist dein Browser kaputt. Das geht seit es in JS Events gibt.
Struppi.
k4_butt.onclick=k4_arg;
grad getestet. sowas läuft weder auf IE noch Mozilla !?
also bei mir leider nicht
Man, Permafrost, so kommen wir nicht weiter. Ich nehme nicht an, dass du glaubst, dass sich deine Browserkopien anders als alle anderen Browserkopien verhalten, daher musst du schon ein bisschen Code rausrücken, wenn wir dir dabei helfen sollen, dein Programm zum Laufen zum bringen.
Mathias
Selbstverständlich. Das läuft auf allen Browsern.
nein, tut's nicht.
Nur sowas:
function bla() {
tue irgendwas
}
element.onclick=bla;
nicht aber
xyz="String der zufällig irgendwelche JavaScript-Befehle enthält";
element.onclick=xyz;
Du musst dem Event schon eine Referenz auf eine Funktion zuweisen.
Hallo gast42,
Nur sowas:
function bla() {
tue irgendwas
}element.onclick=bla;
nicht aber
warum nicht?
xyz="String der zufällig irgendwelche JavaScript-Befehle enthält";
element.onclick=xyz;
kannst du das mal etwas genauer erklären?
»
Du musst dem Event schon eine Referenz auf eine Funktion zuweisen.
genau.
Gruß, Jürgen
knoten.className='cssklasse';
ja das habe ich nachträglich auch erfahren. da braucht man da immernoch eine Browserunterscheidung.
Wo, da? className ist browserübergreifend. Keine Notwendigkeit für eine Browserunterscheidung.
Mathias
Hallo Permafrost,
schon mal
k4_butt.onclick=k4_arg;
probiert?
grad getestet. sowas läuft weder auf IE noch Mozilla !?
dann steckt der Fehler irgendwo anders.
knoten.className='cssklasse';
ja das habe ich nachträglich auch erfahren. da braucht man da immernoch eine Browserunterscheidung.
warum den das? Ich bin bisher ohne ausgekommen.
Gruß, Jürgen
k4_butt.setAttribute('onclick',k4_arg); // NICHT akzeptiert
https://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html#traditionelles-event-handling
https://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html#fehler-code-als-string
(SSL-Warnung wegklicken.)
Mathias
danke sehr aufschlussreich! mit
k4_butt.attachEvent("onclick", handle_ev);
lässt sich nun auch MSIE 6 zur Mitarbeit überreden. Tja ich wollte eine ID übergeben als Argument für die Funktion. attachEvent()
akzeptiert aber keinen String, nur die Funktion selbst. da musste ich eben eine globale ID def. und sie in der entsprechenden Routine setzen. Für Mozilla muss ich dann
k4_butt.addEventListener('onclick', handle_ev, false)
schreiben. Aufwändig aber so läufts nun.
Danke, Gruß
k4_butt.attachEvent("onclick", handle_ev);
lässt sich nun auch MSIE 6 zur Mitarbeit überreden. Tja ich wollte eine ID übergeben als Argument für die Funktion.
attachEvent()
akzeptiert aber keinen String, nur die Funktion selbst. da musste ich eben eine globale ID def. und sie in der entsprechenden Routine setzen. Für Mozilla muss ich dann
Du musst nur eine anonyme Funktion deklarieren.
k4_butt.onclick = fucntion(e) {
handle_ev(parameter);
};
Wobei du die ID garantiert nicht brauchst, da in der Funktion ja bereits mit this das Element zu Verfügung steht.
schreiben. Aufwändig aber so läufts nun.
Der Aufwand wäre nicht nötig, wenn du's richtig machst.
Struppi.
danke sehr aufschlussreich! mit
k4_butt.attachEvent("onclick", handle_ev);
lässt sich nun auch MSIE 6 zur Mitarbeit überreden.
Wenn keine Notwendigkeit besteht, reicht das traditionelle Event-Handling (siehe Struppis Beispiel) völlig aus und die Umstände mit attachEvent/addEventListener muss man sich nicht geben.
Mathias