在jQuery mobile pageShow silentscroll之后,页面跳转到顶部

时间:2015-07-17 11:06:04

标签: jquery-mobile

我们有一个篮子页面,其中有产品,然后是运输方式。这是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时,您需要将浏览器的大小调整为小一点,并刷新一些时间以查看滚动条如何跳到底部和向上。

如何防止这个恼人的滚动到顶部?

1 个答案:

答案 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 );,现在一切都按预期工作了。