VinceM: Event zu einem dynamisch eingefuegten Row linken

Hallo,

Ich versuche gerade ein Event zu einem dynamisch eingefuegten Row zu verbinden. Leider geht es ueberhaupt nicht. Ich habe schon im Internet rumgesucht aber keine Loesung gefunden.

Hier der Code (tbl ist ein Table und count ein Zaehler der incrementiert wird):

tbl.rows[i].className = 'field classy' + (count % 2);
tbl.rows[i].id = 'line'+count;
if (count % 2) {
  addEvent(tbl.rows[i],"mouseout",function () { this.bgColor='#e8e8e8'; }, false);
}
else {
  addEvent(tbl.rows[i],"mouseout",function () { this.bgColor='#d0d0d0'; }, false);
}
addEvent(tbl.rows[i],"mouseover",function () { this.bgColor='#cad4e3'; }, false);
count++;

function addEvent(elm, evType, fn, useCapture) {
        if (elm.addEventListener) {
                elm.addEventListener(evType, fn, useCapture);
                return true;
        }
         else if (elm.attachEvent) {
                var r = elm.attachEvent("on"+evType, fn);
                return r;
        }
        else {
                alert("Handler could not be removed");
        }
}

Vielen Dank fuer die Hilfe!
Gruesse,
VinceM.

  1. Hallo VinceM,

    wenn ich Events per JS einrichte, egal ob an statischen oder dynamisch erzeugten Elementen, mache ich das mit

    element.onXXX=function() { ... } ;

    Gruß, Jürgen

    1. Hallo VinceM,

      wenn ich Events per JS einrichte, egal ob an statischen oder dynamisch erzeugten Elementen, mache ich das mit

      element.onXXX=function() { ... } ;

      Gruß, Jürgen

      Hallo Juergen,

      Das mache ich auch so, aber in dem Fall,

      tbl.rows[i].onmouseout = function () { this.bgColor='#e8e8e8'; };

      geht nicht, deswegen habe ich einen anderen Weg probiert...

      Geht es ueberhaupt ein Event zu einem Row zu verbinden, wenn dies dynamisch erzeugt wurde, oder muessen alle Event-Handler von Anfang an definiert sein?

      Gruss,
      VinceM.

      1. hi,

        Das mache ich auch so, aber in dem Fall,

        tbl.rows[i].onmouseout = function () { this.bgColor='#e8e8e8'; };

        geht nicht

        Und warum "geht nicht"?

        Hast du mal probiert, vernünftig auf die CSS-Eigenschaft zuzugreifen, anstatt ein veraltetes HTML-Attribut verändern zu wollen?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo VinceM,

        geht nicht,

        was geht nicht? Feuert onmouseout nicht (mit alert prüfen) oder wird die Farbe nicht geändert?

        Gruß, Jürgen

        1. Hallo VinceM,

          geht nicht,

          was geht nicht? Feuert onmouseout nicht (mit alert prüfen) oder wird die Farbe nicht geändert?

          Gruß, Jürgen

          Sorry fuer die ungenaue Beschreibung...
          Ich habe folgendes probiert:

          tbl.rows[i].onmouseout = function () { alert('This is a test'); };

          und es geht, ein alert wird angezeigt, wenn ich das neue Row mit dem Maus verlasse.

          Nur wenn ich das alert mit einem this.bgColor='#cad4e3' wird die Hintergrundfarbe nicht geaendert... Irgendwie scheint er ein Problem mit dem this zu haben, oder?

          Gruss,
          VinceM.

          1. Hallo VinceM

            Nur wenn ich das alert mit einem this.bgColor='#cad4e3' wird die Hintergrundfarbe nicht geaendert...

            Du gibst den Rows verschiedene Klassen, wozu? Wie sind diese Klassen im CSS definiert?
            (Mittels CSS definierte Eigenschaften haben Vorrang vor HTML-Attributen.)

            Hast du es mal so versucht?
            tbl.rows[i].onmouseout = function () { this.style.backgroundColor='#e8e8e8'; };

            Irgendwie scheint er ein Problem mit dem this zu haben, oder?

            Welche Meldung bekommst du, wenn du das mittels alert abfragst?

            tbl.rows[i].onmouseout = function () { alert(this); };

            Noch ein Tipp:
            Stelle möglichst eine Seite online, die dein Problem enthält. Dann kann es jeder, der dir helfen will, mit wenig Aufwand nachvollziehen.
            Es wird sich wohl kaum jemand die Mühe machen, extra selbst eine Testseite anhand eines Codefragments zu erstellen, um dir besser helfen zu können.

            Auf Wiederlesen
            Detlef

            --
            - Wissen ist gut
            - Können ist besser
            - aber das Beste und Interessanteste ist der Weg dahin!
            1. Hallo Detlef,

              Du gibst den Rows verschiedene Klassen, wozu? Wie sind diese Klassen im CSS definiert?

              Um spaeter die Settings von den Cell noch aendern zu koennen, oder gibt es eine bessere Loesung?

              Hast du es mal so versucht?
              tbl.rows[i].onmouseout = function () { this.style.backgroundColor='#e8e8e8'; };

              Das habe ich gerade probiert und es funktioniert!!! Vielen Dank fuer den Tipp!

              Welche Meldung bekommst du, wenn du das mittels alert abfragst?

              tbl.rows[i].onmouseout = function () { alert(this); };

              object HTML TableRowElement, passt :-)

              Noch ein Tipp:
              Stelle möglichst eine Seite online, die dein Problem enthält. Dann kann es jeder, der dir helfen will, mit wenig Aufwand nachvollziehen.
              Es wird sich wohl kaum jemand die Mühe machen, extra selbst eine Testseite anhand eines Codefragments zu erstellen, um dir besser helfen zu können.

              Alles klar, dann werde ich es in Zukunft tun...

              Danke nochmal fuer Deine Hilfe!
              Gruss,
              VinceM.