2013-06-08 6 views
5

Ich entwickle Website mit jquery $ .ajax zum Laden von Inhalt von verschiedenen Seiten, die ich in Inhalt/Verzeichnis habe. Ich benutze auch Hashtags, um den Zurück-Knopf zu aktivieren, neu zu laden, usw.AJAX zurück Knopfmenü Problem

ABER. Ich habe ein Hauptmenü mit aktiven Elementen, und wenn ich zwischen den Seiten in der Tiefe des einen Hauptmenüpunkts navigiere, ist es aktiv. Dann klicke ich auf einen der Hauptmenüpunkte, zum Beispiel Kontakte. So wird der Menüpunkt "Kontakte" aktiv. Und wenn ich auf die Zurück-Schaltfläche des Browsers klicke, ändert sich der aktive Menüpunkt nicht.

Also, gibt es eine Möglichkeit, den Status des aktiven Hauptmenüpunktes zu erinnern? Das Hauptmenü befindet sich auf der Containerseite.

Vielen Dank!

$(function(){ 

     $('.menu a') 
      .bind('click',function(e) { 
       e.preventDefault(); 
       $('#content').html('Извините, страница не существует или находится в разработке!'); 
       $('.menu a').each(function() {$(this).removeClass('activelink');}); 
       location.hash=$(this).attr('href').match(/(([a-z]*)\W)*/)[2]; 

       $(this).addClass('activelink'); 
       return false; 
      }); 

     $('#content').on('click','a',function(e) { 
      if (!($(this).hasClass('address') || $(this).hasClass('zoom'))){ 
      e.preventDefault(); 
      $('#content').html('Извините, страница не существует или находится в разработке!'); 
      location.hash=$(this).attr('href').match(/(([a-z]*)\W)*/)[2]; 
      return false; 
      } 
      else { 
       if ($(this).hasClass('address')) { 
       alert('Вы покидаете сайт The House Of Events. Возвращайтесь к нам еще!'); 
       } 
      } 
     }); 

    function hashChange(){ 
     var page=location.hash.slice(1); 
     if (page!=""){ 
      $.ajax({ 
        type: "GET", 
        url: "content/" + page + ".html #sub-content", 
        success: function(data, status) { 
         $('#content').html(data); 
         }, 
        error: function fail() { 
         $('#content').html('Error'); 
         } 
       }); 
     } 
    } 

    if ("onhashchange" in window){ 
     $(window).on('hashchange',hashChange).trigger('hashchange'); 
    } else { 
     var lastHash=''; 
     setInterval(function(){ 
      if (lastHash!=location.hash) 
       hashChange(); 
      lastHash=location.hash; 
     },100); 
    } 
}); 
+0

Postleitzahl Ihres Hauptmenüs, um zu sehen, wie es Menüpunkte aktiviert – Nagarjun

+0

Ich habe hinzufügen ed den Code –

+0

check out 'history.pushState()' –

Antwort

0

Sie können einen kleinen Trick erstellen, wenn Sie zu Hash-Tags stricken.

bearbeiten diese:

$('#content').on('click','a',function(e) { 
    if(!($(this).hasClass('address') || $(this).hasClass('zoom'))){ 
    e.preventDefault(); 
    $('#content').html('Извините, страница не существует или находится в разработке!'); 
    var page=location.hash.slice(1).split('/')[0] + '/' + $(this).attr('href').match(/(([a-z]*)\W)*/)[2]; 
    location.hash=page; 
    return false; 
    } else { 
    if ($(this).hasClass('address')) { 
     alert('Вы покидаете сайт The House Of Events. Возвращайтесь к нам еще!'); 
    } 
    } 
}); 

function hashChange(){ 
    var page=location.hash.slice(1).split('/')[1]; 
    if(page==='undefined'){ 
    page=location.hash.slice(1).split('/')[0]; 
    } 
    if(page!=""){ 
    $.ajax({ 
     type: "GET", 
     url: "content/" + page + ".html #sub-content", 
     success: function(data, status) { $('#content').html(data); }, 
     error: function fail() { $('#content').html('Error'); } 
    }); 
    } 
} 

Sie können auch HTML5 Geschichte API verwenden.

unter den Click-Ereignisse Setzen Sie diese (Position Hash löschen)

var active=$('.menu a.active').attr('id'); // or var active=$('.menu a.active').text(); 
history.pushState({menu: active}, "Our events", "events.html"); 

Dann Sachen mit der Zurück-Taste onpopstate

window.onpopstate = function(e){ 
    if(e.state){ 
    $('.menu a.activelink).removeClass('activelink') 
    $('.menu #'+JSON.stringify(e.state.menu).replace(/"/gi,'')).addClass('activelink'); 
    var url=window.location.pathname; 
    $.ajax({ ... }) 
    } 
} 

Und Finali den Most dumme Art, wenn Sie viel hinzufügen, verwenden zu ändern von Klasse zu den Menüpunkten und überprüfen Sie sie mit .hasClass()

+0

Danke, aber das Problem ist mit den Seiten verbunden, die nicht im Hauptmenü sind. Zum Beispiel war meine Route: Ich habe im Hauptmenüpunkt "Unsere Veranstaltungen" geklickt -> dann fand ich einen Link auf der Inhaltsseite zur Seite "Hochzeiten", klickte darauf und es wurde in mein Inhaltsdiv geladen. Aber diese Seite ist auch ein Mitglied von "Our events", also sollte es aktiv sein -> als ich im Hauptmenü auf "Contacts" geklickt habe -> dann habe ich auf browser back geklickt, aber es stellte sich heraus, dass es keine Verbindung zu Hochzeiten gibt .html im Hauptmenü, so dass der Menüpunkt "Kontakte" noch aktiv ist. Und ich brauche einen Gegenstand "Unsere Ereignisse", um stattdessen "Kontakte" aktiv zu sein. –

+0

Dann haben Sie zwei Möglichkeiten, das zu tun. Zuerst fügen Sie dem Menü Klassen hinzu, die den Namen des untergeordneten Links darstellen. Die zweite Option ist die Verwendung der HTML5-History-API. Damit können Sie den Handler 'stateObj' verwenden, um den Namen des Menüs hinzuzufügen, was Sie aktiv haben möchten (Sie müssen JSON verwenden). Und rufen Sie diese Information mit 'JSON.stringify (e.state.name_of_the_handler)' auf, um die Daten zu erhalten. – Nergal

+0

Oder Sie können yourdomain.com/#/weddings/our_events verwenden und dann 'location.hash.slice (1) .split ("/") [1]' verwenden. Vielleicht ist das die beste Lösung, wenn Sie Hashtag verwenden möchten. – Nergal