Frage

Ich versuche, alle Seiten meiner Website so zu laden, mit jQuery .load Methode, das ist, wie meine Website aussieht:

<script type="text/javascript">  
  $(function() {
    $('.link').bind('click', function(e) {
            var page = $(this).attr('href');
            $('#site').addClass('loading');
            $('#content').load(page, function (){
            $('#site').removeClass('loading');
    });

    e.preventDefault();
    return false;
  });

<a href="test.php" class="link">Test</a>

Mit diesem Code, jeden Link, den class = "link" bekommt, wird meine Seite auf dem div #content laden. Funktioniert gut! aber keine Probleme, wenn ich die test.php laden, wenn ich den class = „link“ auf einem beliebigen Link verwenden, oder die Taste, oder was auch immer, es funktioniert einfach nicht und die neue Seite außerhalb meines #content geladen.

Bereits versucht, dies auf die neue belastete Datei zu kopieren und es funktioniert nicht, dich jemand einen Tipp bekommen?

Danke

War es hilfreich?

Lösung

Dies liegt daran, wenn Sie ein Ereignis binden nur sie es an die Elemente binden, die zu dieser Zeit in dem DOM ist. Also, wenn Sie später neue hinzufügen auf sie nicht auf das Ereignis gebunden werden Sie vorher angebracht. Angenommen, Sie haben jQuery 1.3, hat es eine eingebaute Funktion, dies zu umgehen live . Mit ihm können Sie ein Ereignis für alle gegenwärtigen und zukünftigen Elemente binden. Es ist nicht für alle Veranstaltungen unterstützen, aber click es Unterstützung bietet.

So halten Sie daran, Sie müssen nur diese ersetzen:

$('.link').bind('click', function(e) {

Mit diesem:

$('a.link').live('click', function(e) {

(Ich habe die a. An die Wähler, weil es viel effizienter ist, den Tag angeben, wenn überhaupt möglich)

Wenn Sie nicht jQuery 1.3 haben, sollten Sie so schnell wie möglich aktualisieren. Wenn Sie nicht, überprüfen Sie die livequery -Plugin, das das Gleiche erreicht, aber in einem viel weniger elegante Art und Weise. Alternativ können Sie auch einfach eine Funktion haben, um die Aktion zu binden, und nennen Sie es jedes Mal wenn Sie in neue Daten geladen werden. Alles in allem aber jQuery live ist der beste Weg, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top