【问题标题】:backbone.js and jquery mobile: click on a fragment link (#something) causes a scroll to top of pagebone.js 和 jquery mobile:单击片段链接 (#something) 会导致滚动到页面顶部
【发布时间】:2012-05-03 07:10:19
【问题描述】:

我正在使用jquery mobile 和backbone.js 创建一个单页移动应用程序。这个想法是所有数据都是客户端本地的,而外部数据是通过 ajax 捕获的。此应用旨在使用 Phonegap 进行部署。

我将 jqm 用于一般外观、风格、动画、页面更改等。 Backbone.js 用于处理应用程序模型、服务器同步、模板渲染和路由。 为防止两个库之间发生冲突,jqm 中所有与 ajax 相关的功能均已禁用:

$.mobile.pushStateEnabled = false;
$.mobile.changePage.defaults.changeHash = false;
$.mobile.ajaxEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;

主页加载一个菜单,其中每个元素将您带到不同的应用程序视图。当您单击一个元素时,使用 AJAX 检索数据,动态生成 HTML 并附加到 DOM,然后应用程序更改为该页面。路由是使用 url 片段完成的,以获得更广泛的浏览器支持:

<a href="#news">News</a>

上面的代码使主干路由执行所需的操作,从服务器检索最新消息并呈现页面。 所有这些都完美无缺。

我的问题:当我点击菜单的一个元素时,它所做的第一件事(甚至在执行我的任何代码之前)就是滚动到屏幕顶部。 这似乎不是一个可怕的问题,但是无意的滚动会弄乱 jqm 在进行 ajax 调用时显示的加载指示器。 如果运行此应用程序的设备不支持fixed css 属性,则加载指示器位于单击的元素附近。因此,如果视口滚动到顶部,加载指示器将保持在原始位置。结果,加载指示器被部分或全部隐藏。

知道为什么会发生这种情况吗?我曾尝试使用 Visual Event 搜索 jquery / jquery mobile 附加的奇怪点击事件,但没有成功,所以我一定遗漏了一些东西。

提前致谢!

编辑以添加有关我正在使用的库的更多信息

jquery: v1.6.2

jqm: v1.1.0(对于黑莓设备也是 v1.0,但 jqm 版本之间的行为不会改变)

backbone.js:0.9.2(截至撰写本文时最新)

【问题讨论】:

    标签: jquery-mobile backbone.js


    【解决方案1】:

    尝试使用以下内容删除任何链接的默认行为:

    <a href="#news" onclick="return false;">News</a>
    

    您可以使用more sophisticated technics

    【讨论】:

    • 好的,直接调用主干路由器方法以重定向到特定页面并直接在锚点的 onclick 处理程序上添加 return false 代码就成功了。所以基本上我是手动执行路由,而不是让主干监视 URL 哈希更改。我想知道为什么视图会滚动到顶部,但这只是为了了解。你回答了我的问题,拯救了我的一天,这是最重要的事情。谢谢!
    • 点击的整个行为和你添加return false;之前一样,唯一被删除的是事件链的最后一部分,即原生link 事件,它正在寻找一个 DOM 元素,其 id 为 news,如果没有找到,则将滚动条移动到页面顶部或页面顶部。只是你不想要的行为。
    • 好的,所以主要问题是我没有正确理解本机链接事件的行为方式。 :) 非常感谢@fguillen 提供的其他信息
    猜你喜欢
    • 2012-09-25
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2020-02-17
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多