2012-03-16 12 views
6

popState ईवेंट यूआरएल बदल गया है (या तो पीछे या आगे) ट्रिगर किया जाएगा। और हाल ही में मैं देखा है कि, उदाहरण के लिए, http://www.example.com/ में:कुछ शर्त में पॉपस्टेट को कैसे रद्द करें

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

भी popState ट्रिगर किया जाएगा, पेज "को फिर से लोड करने के लिए" के कारण।
मुझे कैसे पता चलेगा कि यदि यह वही यूआरएल है और केवल # हिस्सा बदल गया है?

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

उदाहरण में, जब आप "शीर्ष" लिंक (ऊपर देखें) पर क्लिक करें, पेज #anchor के लिए जाना जाएगा, लेकिन यह भी यह popState ट्रिगर किया जाएगा और पुन: लोड है, जो मैं उम्मीद नहीं है कारण बनता है।

उत्तर

0

आप window.location.hash की जांच कर सकते हैं कि # इसमें एंकर का प्रकार जोड़ा गया है और उचित कार्रवाई करें।

इसके अलावा, window.onhashchange की जांच करके आप window.location.href या केवल हैश परिवर्तनों में पूर्ण URL परिवर्तनों के बीच अंतर कर सकते हैं।

उदाहरण:

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

लेकिन यह कैसे मैं 'popState' के साथ गठजोड़ कर सकते हैं चर अद्यतन करने के लिए जब भी आप pushState() या replaceState() के साथ राज्य को बदलने की जरूरत है? –

+0

[एमडीएन] (https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history): "ध्यान दें कि pushState() कभी भी हैशचेंज ईवेंट को निकालने का कारण नहीं बनता है, भले ही नया यूआरएल पुराने यूआरएल से अलग हो इसका हैश। "काम नहीं करता है। –

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; 
    }); 
}) 

स्थान हैश के बिना संग्रहीत किया जाता है, इसलिए जब पॉपस्टेट एंकर के साथ लिंक पर क्लिक करने के कारण आग लगती है, तो getLocation विधि पहले के समान परिणाम लौटाएगी और पृष्ठ को स्वैप करने के लिए कोड नहीं होगा।

ठीक से सुनिश्चित करें कि आप वर्तमान स्थान का ट्रैक रखने के लिए, आपको भी

संबंधित मुद्दे