2012-03-16 21 views
6

URL değiştiğinde (arkada veya ileride) popState olayı tetiklenir.Belirli bir durumda popState nasıl iptal edilir

<a href="#anchor">Top</a> 

Ayrıca sayfa "yeniden yükle" neden popState tetikleyecek: Ve son zamanlarda, örneğin http://www.example.com/ yılında, fark etmişsinizdir.
Aynı url ve yalnızca # parçasının değiştiğini nasıl bilebilirim? "Üstte" bağlantısından (yukarıya bakınız) tıkladığınızda örnekte

$(window).bind("popstate",function(){ 
    swap(location.href); 
}) 

, sayfa #anchor gidecek, aynı zamanda popState tetikleyecek ve ben beklemiyorum olan yeniden neden olur.

cevap

0

# bağlantı türünün buna eklenip eklenmediğini görmek için window.location.hash denetleniyor olabilirsiniz ve uygun eylemi gerçekleştirin.

Ayrıca, window.onhashchange denetleyerek window.location.href'daki tam URL değişiklikleri veya yalnızca karma değişiklikleri arasında ayrım yapabilirsiniz.

Örnek: bu sadece bir çapa değişiklik olduğunu eğer belirlemek için olaydan bir şey bulamadı, bu yüzden aşağıdaki gibi kod ile bunu kendim takip etmek zorunda kaldı

window.onhashchange = function() 
{ 
    console.log('Hash change:' + window.location.hash); 
} 
+1

Ama 'popState' ile nasıl birleştirebilirsiniz Eğer pushState() veya replaceState() hal değiştirmek zaman değişkeni güncellemeniz gerekir? –

+0

[MDN] (https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history): 'Not: Yeni URL yalnızca eski URL’den farklı olsa bile pushState() öğesinin hiçbir zaman bir karma değişkeni olayına neden olmasına neden olmadığını unutmayın. onun hash "" Çalışmıyor gibi görünüyor. –

4

:

function getLocation() { 
    return location.pathname + location.search; 
} 

var currentLocation = getLocation(); 

$(function() { 
    $(window).on("popstate", function() { 
    var newLocation = getLocation(); 
    if(newLocation != currentLocation) { 
     // DO STUFF 
    } 
    currentLocation = newLocation; 
    }); 
}) 

Konum karma olmadan saklanır, böylece popstate anchor ile bağlantıyı tıklatması nedeniyle patladığı zaman getLocation yöntemi daha önce olduğu gibi aynı sonucu döndürür ve sayfanın takas kodu değişmez.

düzgün emin geçerli konumunu takip yapmak için ayrıca

İlgili konular