[jQuery] Script ausführen wenn Bereich geladen ist

kuhlmaehn

Erfahrenes Mitglied
Hi! Ich würde gerne die Navigation einer recht umfangreichen Seite mit jQuery anpassen. Jetzt soll die zuständige Funktion ausgeführt werden, sobald alles für die Navi geladen wurde. Im Moment nehme ich dafür $(document).ready. Hier startet die Funktion allerdings erst wenn die ganze Seite geladen wurde. Da die Navi sehr weit oben steht dauert mir das aber zu lange. Dann habe ich herausgefunden, dass man mit der Funktion .load auf das laden eines Elements mit einer bestimmten Klasse warten kann. Ich hab daher folgendes probiert:
Code:
$("div.navi").load(function { ... });
Das hat allerdings überhaupt nicht funktioniert. Hab ich da was falsch gemacht oder funktioniert das so nicht?
Den jQuery-Code direkt unter den HTML-Code der Navi zu schreiben will ich auch nicht, da ich ungerne Anpassungen am Code machen will. Im Grunde soll das Skript so verfügbar sein, als würde der jQuery-Code im OnClick der Navi-Elemente stehen. OnClick möchte ich aber auch nicht verwenden. Ich hoffe ich habe mich klar ausgedrück und jemand kann mir helfen :)
Danke!
 
Dann habe ich herausgefunden, dass man mit der Funktion .load auf das laden eines Elements mit einer bestimmten Klasse warten kann.[....]
Das hat allerdings überhaupt nicht funktioniert. Hab ich da was falsch gemacht oder funktioniert das so nicht?
Jo, du hast etwas falsch gemacht, die Doku nicht komplett gelesen :)

This event can be sent to any element associated with a URL: images, scripts, frames, iframes, and the window object.

Den jQuery-Code direkt unter den HTML-Code der Navi zu schreiben will ich auch nicht, da ich ungerne Anpassungen am Code machen will. Im Grunde soll das Skript so verfügbar sein, als würde der jQuery-Code im OnClick der Navi-Elemente stehen. OnClick möchte ich aber auch nicht verwenden. Ich hoffe ich habe mich klar ausgedrück und jemand kann mir helfen :)

Ich weiss ja nicht, wass du meinst mit "OnClick möchte ich aber auch nicht verwenden", aber rein vom Prinzip her könntest du den Klick-Event fürs komplette Dokument überwachen.
Feuert er, schaust du nach, ob das auslösende Element eines aus der Navi ist, und falls ja, machst du, was gemacht werden soll(falls nicht, machst du garnichts)
 
Jo, du hast etwas falsch gemacht, die Doku nicht komplett gelesen :)
Oh, immer der gleiche Fehler :D. Danke, ist mir in der jquery api irgendwie nicht über den Weg gelaufen (obwohl es da mit Sicherheit stehen wird :-()
Ich weiss ja nicht, wass du meinst mit "OnClick möchte ich aber auch nicht verwenden", aber rein vom Prinzip her könntest du den Klick-Event fürs komplette Dokument überwachen.
Feuert er, schaust du nach, ob das auslösende Element eines aus der Navi ist, und falls ja, machst du, was gemacht werden soll(falls nicht, machst du garnichts)
Naja mein Problem war, dass ich das Click-Event ja initialisieren muss (oder wie man das nennt). Also z.B.
Code:
$('.naviEle').click(function() {
  ...
});
Aber das kann ich ja erst aufrufen wenn alle Elemente mit der Klasse naviEle geladen sind (zumindest hat es bei mir sonst nicht funktioniert).
Ich will halt, dass es sofort danach aufgerufen wird und damit so schnell verfügbar ist wie es ein onclick auch wäre.
Jetzt denke ich gerade über deine Antwort nach.. meinst du etwa sowas in der Art?
Code:
$('body').click(function() {
  if(this.hasClass('naviEle')) {
   ...
  }
});
Wobei ja auch Body erstmal geladen werden muss oder? Wird das ClickEvent dann eigentlich durchgereicht? Und steht im this überhaupt das geklickte Element :confused:
Ich bin gerade viel zu fertig um es zu testen aber wenn das so funkioniert wäre das natürlich super! =)
 
Jetzt denke ich gerade über deine Antwort nach.. meinst du etwa sowas in der Art?
Code:
$('body').click(function() {
  if(this.hasClass('naviEle')) {
   ...
  }
});
Wobei ja auch Body erstmal geladen werden muss oder? Wird das ClickEvent dann eigentlich durchgereicht? Und steht im this überhaupt das geklickte Element :confused:
Ich bin gerade viel zu fertig um es zu testen aber wenn das so funkioniert wäre das natürlich super! =)

Jo, so in der Art hatte ich es gemeint:)
Nur nicht über body(der ist ja eben auch noch nicht bekannt), sondern über document:
Code:
$(document)
.click(
        function(event)
        {
          if($(event.target).hasClass('naviEle')){alert('bingo');}
        }
      );
 
Ah cool, dank dir. Das dann bei jedem Klick auf der gesamten Seite eine Überprüfung stattfindet ist nicht problematisch? Ich kann immer schwer einschätzen wie sehr jQuery den Browser/Benutzer mit sowas belastet.
Danke! :)
 
Es ist sicher belastender, als wenn du die Eventüberwachung den betreffenden Elementen direkt zuweist....aber bei deinem Vorgaben der einzige Weg.
 

Neue Beiträge

Zurück