当前位置: 首页 > 面试题库 >

如何在不跳文档的情况下更新window.location.hash?

钮边浩
2023-03-14
问题内容

我在我的网站上设置了一个滑动面板。

完成动画制作后,我像这样设置哈希

function() {
   window.location.hash = id;
}

(这是一个回调,并且在id前面已分配)。

这很好用,可以使用户在面板上添加书签,也可以使非JavaScript版本正常工作。

但是,当我更新哈希时,浏览器跳到该位置。我想这是预期的行为。

我的问题是:如何预防这种情况?即如何更改窗口的哈希值,但是如果哈希值存在,浏览器 不能
滚动到该元素?某种event.preventDefault()东西吗?

我正在使用jQuery 1.4和scrollTo插件。

非常感谢!

更新资料

这是更改面板的代码。

$('#something a').click(function(event) {
    event.preventDefault();
    var link = $(this);
    var id = link[0].hash;

    $('#slider').scrollTo(id, 800, {
        onAfter: function() {

            link.parents('li').siblings().removeClass('active');
            link.parent().addClass('active');
            window.location.hash = id;

            }
    });
});

问题答案:

有一种解决方法,可以在现代浏览器上使用历史记录API,而在旧浏览器上进行回退:

if(history.pushState) {
    history.pushState(null, null, '#myhash');
}
else {
    location.hash = '#myhash';
}


 类似资料:
  • 本文向大家介绍如何在不覆盖现有文档的情况下更新MongoDB文档?,包括了如何在不覆盖现有文档的情况下更新MongoDB文档?的使用技巧和注意事项,需要的朋友参考一下 要仅更新字段值,请使用update()和$set。这不会覆盖现有的。首先让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是更新文档而不覆盖现有文档的查询- 在find()方法

  • 问题内容: 我的页面结构是: 如何在不刷新整个页面的情况下更新/刷新组件? 一旦用户成功登录,我想在标题中隐藏“登录”链接。标题在所有组件/路由中都是通用的。 问题答案: 您可以使用 来在整个应用程序的不同组件之间进行通信。您可以定义一个数据共享服务,其中包含 您可以订阅和发出更改的服务。 定义数据共享服务 在您的 提供商条目中添加。 接下来,将导入到您和您在其中执行登录操作的组件中。在订阅主题更

  • 我正在尝试从组件更新(添加,删除)查询参数。在angularJS中,由于: 我有一个应用程序,其中包含用户可以过滤,排序等列表,我想在url的查询参数中设置所有激活的过滤器,以便他可以复制/粘贴URL或与其他人共享。

  • 我有一个用户名列表,用户名列表根据用户输入的数量而增加。问题是,当用户输入用户名时,列表会被输入填充,只有当我的页面重新加载时,我的页面才会更新。这是我迄今为止尝试过的代码。 我无法在外页重新加载的情况下更新数据。请建议我如何更新ui:在外页重新加载的情况下重复数据。提前谢谢。

  • 问题内容: 我正在使用嵌套对象(与该帖子相关的用户)为一组文档建立索引(将它们想象为论坛帖子)。我的问题是用户字段可能已更新,但是由于帖子未更改,因此它们未重新索引,并且用户嵌套的对象已过时。有没有一种方法可以更新嵌套对象,而无需再次为整个文档重新编制索引?还是唯一的解决方案是在用户每次更改时重新索引该用户的所有相关帖子? 问题答案: 您可以使用Update API。 需要注意的是更新脚本支持条件

  • 问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ