2011-05-20 53 views

回答

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
demo2:http://jsfiddle.net/maniator/XCjpy/show/
demo3:http://jsfiddle.net/maniator/XCjpy/show/#testing_again

+0

//正是我想要做的。谢谢!!! – Moon 2011-05-21 05:02:50

+0

@Moon,没问题:-) – Neal 2011-05-22 20:19:50

+0

你救了我的朋友(y) – NullPointer 2014-02-27 06:28:57

1

看看This
请参阅属性表。
location.hash应该可以帮到你。

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 2011-05-20 20:04:38

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

//感谢您的输入。我不知道有这样的事件,但是,我想要做的是通过检查哈希标记在onload或domready上执行一个函数。我测试了它,但是当我访问带有哈希标签的URL时,onhashchange不会触发。虽然我很欣赏你的意见。 – Moon 2011-05-21 05:02:14

+0

你可以做的是设置一个函数'hashChanged',用于'window.onhashchange = hashChanged'。你可以在'body'标签最后的'script'标签中调用相同的函数'hashChanged()' – Mic 2011-05-21 09:10:38