thomas: jQuery - onclick auf Nachgeladener Seite anwenden

Hallo,

noch habe ich keine Lösung dafür gefunden.

ich haben Seite1.html in der ein link ist und ein div.
Hier steht im JavaScript Teil das bei klick auf den link eine andere Seite: Seite2.html in das div geladen werden soll. (Ajax)

Seite2.html enthält eine Tabelle wo ich die Zeilen (tr) anklickbar machen will.

Wie mache ich das am besten?

Dieser Code funktioniert in Seite1.html nicht und in Seite2.html nicht.
(Keine Reaktion, nichts passiert, keine Fehlermeldung, findet vermutlich die Tabelle nicht)

code:
_____________________
$("tr")
   .click(function(){
   alert('geht!');
});
_____________________

Nur wenn ich diesen Code auf einer Seite habe mit der Tabelle und diese Seite nicht nachgeladen wird, dann funktioniert es.

Was muss ich anders machen?
Ich befasse mich grad ganz frisch mit jQuery also kanns gut sein das ich etwas übersehen hab.

Danke für eure hilfe.

Gruß

  1. Nur wenn ich diesen Code auf einer Seite habe mit der Tabelle und diese Seite nicht nachgeladen wird, dann funktioniert es.

    Was muss ich anders machen?

    Du musst die Funktionsweise von jQuery verstehen. $("tr") sucht alle tr-Elemente, die gerade aktuelle im Dokument gefunden werden, und bei denen registriertst du dann mit .click einen Event-Handler.

    Wenn du das Dokument nun änderst, indem du Code lädst und ihn ins Dokument reinschreibst, entstehen natürlich neue Elemente und der DOM-Baum wird geändert - diese neuen Elemente erhalten aber nicht automatisch Event-Handler. Dazu müsstest du obigen Befehl nach dem Nachladen via Ajax nochmal auf den eingefügten Teilbaum anwenden.

    Was du willst: Alle tr-Elemente, sowohl die existenten, als auch die zukünftig irgendwann zum DOM hinzugefügten überwachen. Das geht ab jQuery 1.3 mit live(), für ältere jQuery-Versionen gibt es Plugins.

    Im Grunde wird da "Event Delegation" gemacht, d.h. es wird gar nicht jedem einzelnen tr-Element ein Handler gegeben, sondern nur zentral einer registriert. Dann wird vom Event-Bubbling Gebrauch gemacht. Die click-Events steigen nämlich auf, sodass sie zentral bei einem höherliegenden Knoten verarbeitet werden können.

    Mathias

    1. Hallo Mathias,

      Du musst die Funktionsweise von jQuery verstehen.

      Ich weiß, damit hab ich noch ziemliche Probleme.

      Das geht ab jQuery 1.3 mit live(), für ältere jQuery-Versionen gibt es Plugins.

      Tausend Dank für diesen Tipp und deine Hilfe.
      Du hast mir damit wirklich weiter geholfen.

      Mathias

      Gruß
      thomas