मैं गतिशील रूप से सामग्री लोड करने के लिए हैश का उपयोग कर रहा हूं। बैक बटन काम करने के लिए मैं हैश परिवर्तनों को कैप्चर कर रहा हूं। हालांकि कभी कभी मैं ट्रिगर हैश समारोह बदल बिना हैश बदलने की जरूरत है (उदाहरण के लिए, जब पेज सर्वर साइड पुनः निर्देशित किया गया था और मैं हैश अद्यतन करने के लिए एक बार सामग्री वापस आ गया है की जरूरत है।)हैश बदलें ईवेंट को ट्रिगर किए बिना हैश बदलें
सबसे अच्छा समाधान मैं के साथ आए हैं हैशचेंज इवेंट को अनबिंड करना, बदलाव करना और फिर इसे दोबारा बनाना है। हालांकि, जैसा कि यह असंकालिक रूप से होता है, मुझे लगता है कि यह बहुत जल्दी rebinds और अभी भी हैश परिवर्तन पकड़ता है।
इस समय मेरा समाधान बहुत खराब है: सेटटाइमआउट में रीबाइंडिंग। क्या किसी के पास बेहतर विचार है?
$(window).unbind('hashchange', hashChanged);
window.location.hash = "!" + url;
setTimeout(function(){
$(window).bind('hashchange', hashChanged);
}, 100);
संपादित करें:
आमिर Raminfar के सुझाव मुझे एक समाधान है कि एक समय समाप्ति की आवश्यकता नहीं है करने के लिए कहा।
_ignoreHashChange = true;
window.location.hash = "!" + url;
और हैश बदल घटना से करता है:
function hashChanged(event){
if(_ignoreHashChange === false){
url = window.location.hash.slice(2);
fetchContent(url);
}
_ignoreHashChange = false;
}
एक अच्छा, सरल उपाय है, तो आप बनाना चाहिए यह एक जवाब – Peter
केवल एक चीज बाकी है यह जांचने के लिए कि नया हैश _ignoreHashChange = true सेट करने से पहले पुराने के बराबर नहीं है; – Kasheftin
आप काउबॉय की बीबीक्यू लाइब्रेरी को देखना चाहते हैं जो आपको बैक एंड हैशचेंज पर सभी चीजों पर अच्छा नियंत्रण देता है: http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js। एचटीएमएल – hybernaut