Permafrost: DOM: wiedermal Probleme mit DOM und MS IE

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ß
  1. 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

    1. 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ß

      1. 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

        --
        Am Ende wird alles gut.
        1. 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

          1. 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.

          2. 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

        2. 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.

          1. 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

      2. 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

      3. 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

    1. 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ß

      1. 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.

      2. 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