2011-05-20 14 views
9

के आधार पर एक जेएस फ़ंक्शन निष्पादित करने के लिए मैंने देखा कि कुछ वेबसाइटें URL पर आधारित जावास्क्रिप्ट फ़ंक्शन निष्पादित करती हैं। उदाहरण के लिए,url हैश url # nameoffunction

जब मैं का उपयोग http://domain.com/jobs#test

तो वेबसाइट एक समारोह के आधार पर कार्यान्वित #test

मैं location.href की जाँच करके यह कर सकते हैं, लेकिन वहाँ एक बेहतर तरीका है?

+0

आप से पूछा सही सवाल दोस्त (वाई) – NullPointer

उत्तर

10

यह मुझे क्या करना है:

window.onload = function(){ 
    var hash = (window.location.hash).replace('#', ''); 
    if (hash.length == 0) { 
     //no hash do something 
    } 
    else { 
     //else do something with hash 
    } 
} 

डेमो: http://jsfiddle.net/maniator/XCjpy/show/#test
डेमो 2: http://jsfiddle.net/maniator/XCjpy/show/
डेमो 3: http://jsfiddle.net/maniator/XCjpy/show/#testing_again

+0

// वास्तव में मैं क्या करना चाहता हूं। धन्यवाद!!! – Moon

+0

@ मून, कोई समस्या नहीं :-) – Neal

+0

आपने मुझे दोस्त बचाया (y) – NullPointer

1

This पर एक नज़र डालें।
संपत्ति तालिका देखें।
location.hash आपकी मदद करनी चाहिए।

0

आप YUI की तरह एक पुस्तकालय इस्तेमाल कर सकते हैं सुंदर ढंग से इस अधिक करने के लिए, YUI ब्राउज़र पर एक नजर डालें इतिहास प्रबंधक

http://developer.yahoo.com/yui/history/

2

Live Demo

$(window).bind('hashchange', function() { 
    var hash = document.location.hash; 
    var func = hash.replace('#', ''); 
    eval(func + '()'); 
}); 

function asdf() { 
    alert('asdf function'); 
} 

function qwerty() { 
    alert('qwerty function'); 
} 

नोट:eval() खतरनाक है। आप सुरक्षित कार्यों की एक पूर्वनिर्धारित सरणी बनाना चाहिए, और उनको कॉल करें।

+0

उत्तर में 'eval' रखो, और फिर इसका उपयोग न करें? अच्छा :) – Mic

3

आप IE6 और IE7 जैसे पुराने ब्राउज़रों का समर्थन करने की जरूरत नहीं है, तो आप उपयोग कर सकते हैं:

window.onhashchange = function(){ 
    switch(location.hash) { 
    case '#hash1': 
     //do something 
    break; 
    case '#has2': 
     //do something else 
    break; 
    } 
} 

लेकिन आप मतदान करने की जरूरत है आप पुराने ब्राउज़र का समर्थन करने के लिए है, तो:

var oldHash = location.hash; 
setInterval(function(){ 
    if(location.hash !== oldHash){ 
    oldHash = location.hash; 
    //hash changed do something 
    } 
}, 120); 
+0

// इनपुट के लिए धन्यवाद। मुझे नहीं पता था कि ऐसी घटना है, लेकिन..मैं जो करना चाहता हूं वह हैश टैग की जांच करके ऑनलोड या डोमरेडी पर एक फ़ंक्शन निष्पादित करना है। मैंने इसका परीक्षण किया, लेकिन जब मैं हैश टैग संलग्न के साथ यूआरएल तक पहुंचता हूं तो ऑनशैशचेंज आग नहीं होता है। हालांकि मैं आपके इनपुट की सराहना करता हूं। – Moon

+0

आप जो कर सकते हैं वह 'हैश चेंज' नामक एक फ़ंक्शन सेट है जिसे आप 'window.onhashchange = हैश चेंज' के लिए उपयोग करते हैं। और आप 'body' टैग के अंत में एक 'स्क्रिप्ट' टैग में एक ही फ़ंक्शन 'हैश चेंज()' को कॉल करते हैं – Mic