我们有一个篮子页面,其中有产品,然后是运输方式。这是jQuery mobile
网站。
我想要实现的目标是,如果选择了送货方式,那么如果有页面重新加载,jQuery mobile会跳转到div
送货方式。
这是代码,滚动到送货方式的内容。这是一个内联脚本。
$(document).on("pageshow", function (e, ui) {
$.mobile.silentScroll($('#kosar').offset().top);
});
预期结果:在页面刷新时,窗口滚动到#kosar
div。
当前结果:页面滚动到#kosar
div,但立即滚动到页面顶部。
我们发现,如果在silentScroll
之后发生了一些错误,则窗口不会跳回到页面顶部。所以看来,在pageshow
之后将其滚动回来,但我们不知道是什么。
例如:
$(document).on("pageshow", function (e, ui) {
$.mobile.silentScroll($('#kosar').offset().top);
undefined_function(); //This function is not exists
});
以下是非工作和“工作”示例:
Here is a live example. 当您刷新页面时,您会看到一秒钟的大红色文字,然后立即看到您将被带到页面顶部。
Here is the example with error.
我在FF Developer Edition中测试过它。使用Chrome时,您需要将浏览器的大小调整为小一点,并刷新一些时间以查看滚动条如何跳到底部和向上。
如何防止这个恼人的滚动到顶部?
答案 0 :(得分:2)
我认为,这是jQuery mobile js中的一个错误,我已经向他们报告了这个错误。
最后我明白了。
版本: http://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js
我在jQuery mobile js silentScroll
定义中创建了一个断点,以及我所看到的,由于某种原因它运行了两次。第一个是好的电话,ypos
是一个数字,我想要跳,这就是它跳到正确位置的原因。
但是,稍后,在第15432行,这里是这些代码行,正在准备文档的内容:
// window load event
// hide iOS browser chrome on load if hideUrlBar is true this is as fall back incase we were too early before
if ( $.mobile.hideUrlBar ) {
$window.load( $.mobile.silentScroll );
}
当它发生时,在第二次调用时,ypos
silentScroll
将是一个对象,而不是一个数字,如函数所期望的那样,如果它不是数字,然后jQuery mobile将ypos
设置为$.mobile.defaultHomeScroll
如果你没有修改那么实际上是1。这就是它跳回家的原因。
警告:如果您认为,您只需要将$.mobile.hideUrlBar
设置为false,那就错了。我已经尝试了,但它有副作用,因为在第15416行还有另一个参考这个变量,如果你关闭,那么当你从一个页面转到另一个页面时,你不会被重定向到顶部你的第二页。
所以解决方案就是注释掉这个$window.load( $.mobile.silentScroll );
,现在一切都按预期工作了。