2009-09-05 18 views
5

मेरे पास एक टैब है जिसमें दो टैब हैं जिन्हें मैं जावास्क्रिप्ट के साथ स्विच करने में सक्षम होना चाहता हूं, लेकिन बुकमार्किंग/लिंकिंग के लिए यूआरएल में एंकर (उदा। page.html#tab1) भी सेट कर सकता हूं।यूआरएल एंकर सक्रिय करें लेकिन इसे स्क्रॉल न करें?

डिफ़ॉल्ट रूप से टैब सामग्री दो divs में होती है, एक दूसरे के नीचे एक, और एंकर टैग जेएस अक्षम के साथ सही पर स्क्रॉल करेगा।

जेएस सक्षम के साथ, सीएसएस कक्षाएं उन्हें टैब के रूप में कार्य करने के लिए लागू होती हैं। प्रत्येक टैब प्रत्येक एंकर से लिंक होता है, लेकिन जब आप टैब स्विच करने के लिए क्लिक करते हैं, तो पृष्ठ टैब पर स्क्रॉल करता है। अगर मैं ऑनक्लिक फ़ंक्शन से झूठी वापसी करता हूं तो यूआरएल एंकर को शामिल करने के लिए नहीं बदलता है।

मैं ब्राउज़र URL को page.html#tab1 पर कैसे बदलूं लेकिन #tab1 पर स्क्रॉल नहीं करें ??

उत्तर

5

मैंने थोड़ी देर के लिए इसके साथ खेला है, क्योंकि मैंने शुरुआत में आपको विश्वास नहीं किया था (मैं इसी तरह के व्यवहार के लिए jQuery history plugin का उपयोग करता हूं)।

और मैं स्टंप हो गया हूं। मुझे नहीं लगता कि आप कर सकते हैं। क्या काम कर सकता है, use javascript to set the hash to something DIFFERENT from what is actually on the page है। और उसके बाद हैश को पढ़ने और सही सामग्री को पॉप्युलेट करने के लिए लोड पर जावास्क्रिप्ट का उपयोग करें। I do this on my site। तो उस परिदृश्य में, जावास्क्रिप्ट के बिना उपयोगकर्ता स्क्रॉल किए जाएंगे, जावास्क्रिप्ट वाले उपयोगकर्ता इतिहास श्रृंखला बनाए रखेंगे, और जब लोग बिना लोगों के लिंक (या इसके विपरीत) के लिंक भेजते हैं तो यह केवल निराशाजनक हो जाता है।

+0

यह काम करता है, और मैंने अभी पाया है कि validator.w3.org क्या करता है। अंत में मैंने गैर-जेएस ब्राउज़र में एंकर कूद को सही स्थान पर खींचने का फैसला किया क्योंकि दो divs बहुत लंबा नहीं हैं, और जैसा कि आप कहते हैं कि जेएस-सक्षम उपयोगकर्ताओं के लिंक गैर-जेएस उपयोगकर्ताओं के लिए काम करते हैं। – DisgruntledGoat

-1
window.location.hash = 'tab1'; 

काम कर सकता है।

+1

नहीं, यह नहीं होगा, जो एंकर पर स्क्रॉल करेगा (कुछ मामलों में सफारी को छोड़कर, इसके टूटे हुए स्थान के लिए धन्यवाद .श समर्थन)। – andynormancx

0

क्या आपके पास कुछ जावास्क्रिप्ट हो सकता है जो एंकर नाम बदल गया, window.location.hash सेट करें, और फिर एंकर नामों को वापस बदल दिया?

(मैं सही है कि andynormancx की पुष्टि की है, और दृश्य स्क्रॉल window.location.hash की स्थापना, लेकिन मैं भी अगर window.location.hash भी स्क्रॉल करने के लिए डोम में एक लंगर बनाने का परीक्षण करने के आलसी हूँ।)

0
var Namespace = { 
    var timer, scroll; 
} 

// Onclick 
Namespace.scroll = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; 
Namespace.timer = setInterval(function() { scrollTo(0, Namespace.scroll) }, 100); 
location.hash = this.href; 
clearInterval(Namespace.timer); 
1

एक त्वरित हैक:

var thehash = e.target.hash; 
$(thehash).prop('id',thehash.substr(1)+'-noscroll'); 
window.location.hash = e.target.hash; 
$(thehash+'-noscroll').prop('id',thehash.substr(1));  

इस से पहले और यूआरएल के हैश बदलने के बाद एचटीएमएल तत्व की आईडी बदल जाता है। मेरे लिए काम करता है, लेकिन कुछ तोड़ सकता है। यह ब्राउज़र को हैश परिवर्तन पर स्क्रॉल करने से रोकता है, क्योंकि उस आईडी के साथ HTML तत्व नहीं है।

+0

यह मेरे लिए काम करता था (केवल आधा दिल से इसकी उम्मीद थी)। निश्चित रूप से इसके लिए हैक जैसी गुणवत्ता है, लेकिन इस तरह से अब तक कोई समस्या नहीं देखी गई है। –

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