2011-05-11 135 views
1

我构建了一个完全依赖于Javascript的页面。 每当用户点击链接或按钮时,它都会更改网址的散列值(#doSomething)。在javascript中将setTimeout作为事件处理程序indefinetly运行

我已经设置了一个函数,每200ms检查哈希值的变化,换句话说,一个自定义的事件处理程序,并根据值是什么运行一些代码。现在看起来很好,因为我仍然处于开发过程中,而且页面非常轻。

这是我的问题可以运行一个脚本无限期地检查这个值吗?或者当页面有更多内容和东西需要处理时会影响性能?

有没有更好的方法来设置一个脚本来检测URL散列的变化?

这里是我的脚本:

var currenthash = (window.location.hash)?window.location.hash: ''; 
addEvent(window,'load',function() { 
    if (currenthash != ''){ 
     hashChanged(); 
    } 
    var timeInterval = setInterval(function() { 
     if (window.location.hash != currenthash) { 
      hashChanged(); 
      currenthash = window.location.hash; 
     } 
    },1000); 
}); 

var hashChanged = function (str) { 
    var id = window.location.hash.replace("#",''); 
    var selected = $id(id); 
    // do some more stuff 

    } 
} 

回答

2

它不应该是一个问题,如果它检查每1000毫秒(我通常跑在100矿),但考虑到使用本机事件处理程序(hashchange)如果存在的话......

if ('onhashchange' in window) { 
    addEvent(window, 'hashchange', hashChanged); 
} else { 
    // Poll like normal. 
} 

这将节省您在现代浏览器中进行轮询以支持此事件。

+0

谢谢我总是喜欢使用本机代码,这正是我需要的 – Ibu 2011-05-11 01:15:30

0

只要间隔不能太短,没有问题的。

1

如果哈希值仅在点击时发生变化,为什么不在文档上单击监听器,根本就不需要setInterval或setTimeout,只有在需要时才会运行该函数。

+0

实际上页面的许多组件可以触发哈希更改,并且我希望能够跟踪更改,以便我可以使用后退按钮等。但尽管如此,谢谢你 – Ibu 2011-05-11 03:48:10