以编程方式更新哈希,而不触发hashchange事件
Updating the hash programmatically without triggering hashchange event?
我正在使用jQuery BBQ插件将状态推送到location.hash。
为了防止反馈循环,我想在以编程方式设置状态时暂时禁用hashchange侦听器。
我见过这样的解决方案:在不触发hashchange事件的情况下更改哈希
不幸的是,它似乎不是很健壮,因为它有时会触发,即使我这样做:
updateURL(obj){
$(window).unbind( 'hashchange');
$.bbq.pushState(obj);
setTimeout( function() { bindHashChange()}, 500);
}
现在是否有更好的方法以编程方式推送状态?也许是另一个JS库?
使用超时执行此操作将无法可靠地工作。链接答案的重要部分是设置一个处理程序知道的标志。代码见更新后的问题。
或者,将一个临时处理程序绑定到负责重建处理程序的事件:
function updateState(state, handler) {
var win = $(window);
function temporaryHandler() {
win.unbind('hashchange', temporaryHandler);
win.bind('hashchange', handler);
};
win.unbind('hashchange', handler);
win.bind('hashchange', temporaryHandler);
$.bbq.pushState(state);
}
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 用于IE7的hashchange polyfill,每个刻度可以跟踪多个事件
- 让hashchange事件在所有浏览器(包括IE7)中工作
- 仅捕获不是由锚点单击引起的hashchange事件
- 防止'hashchange'事件
- 了解hashchange事件的执行顺序
- 如何确保绑定到hashChange事件不会冒泡
- JQuery hashchange事件-在哪里放置
- 移除哈希时是否触发hashchange事件
- jQuery hashchange事件立即执行动画,没有速度
- 以编程方式更新哈希,而不触发hashchange事件
- IE7问题中的绑定hashchange事件
- jQuery:如何在hashchange事件处理程序中查找元素
- 如何手动调度hashchange事件