在javascript中无限期地运行setTimeout作为事件处理程序

时间:2011-05-11 00:52:58

标签: javascript javascript-events

我构建一个完全依赖于Javascript的页面。 每当用户点击链接或按钮时,它都会更改网址的哈希值(#doSomething)。

我已经设置了一个函数,每200ms检查一次哈希值以进行更改,换句话说就是自定义事件处理程序,并根据值来运行somecode。现在它看起来很好,因为我还处于开发过程中,而且我的页面非常清晰。

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

有没有更好的方法来设置脚本来检测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

    }
}

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果散列仅在点击上发生变化,为什么不在文档上单击监听器,根本不需要setInterval或setTimeout,只有在需要时才运行。

答案 2 :(得分:0)

只要间隔时间不短,就没有问题。