我遇到了一个非常奇怪的错误......一旦我的JS代码从jQuery success
调用进入我的$.ajax
函数,我窗口上的滚动邮件会跳转到页面底部。这对我来说是一个真正的问题,因为我正在进行移动页面加载,并且不想要这种不和谐的动画。
我通过console.debug($(window).scrollTop());
次调用我的代码来追踪它,并且在进入成功后,它立即从0
(应该是什么)变为数百(差)中的某个数字回调,在执行任何回调代码之前。
我在Safari和Chrome中遇到了同样的问题,用户代理设置为iOS 5。
以下是问题区域的片段:
console.debug($(window).scrollTop()); //= 0
// store the user's direction
M.advance = args.advance;
console.debug($(window).scrollTop()); //= 0
// setup the existing page for a load event
M.init_change();
console.debug($(window).scrollTop()); //= 0
$.ajax({
url: args.url,
success: function(resp) {
console.debug($(window).scrollTop()); //= 616
var $resp = $(resp);
console.debug($(window).scrollTop()); //= 616
// cycle through and get the elements we want
for(var i = 0, l = $resp.length; i < l; i++) {
var $node = $($resp[i]);
if($node.is('nav[data-role="top-nav"]]')) M.current.nav = $node;
// ...
任何人都知道这里发生了什么?我在我的智慧结束......
请在此处查看完整文件:https://gist.github.com/1499965
答案 0 :(得分:0)
假设我对正在发生的事情的评论是正确的:
在$ .ajax成功函数中,当您知道正在重建页面并希望将滚动位置设置为顶部时,请执行以下操作:
$("html").scrollTop(0);
快来思考一下,即使我错了也可以解决它。
<强>更新强> 您可以将它放在$ .ajax的'complete'事件中,该事件在ajax调用中的成功和错误事件之后触发。
$.ajax({
url: args.url,
success: function(resp) {
// your success code
},
error: function() { console.error('something went wrong'); },
complete: function() {
window.scrollTo(0,0); // or the $('html').scrollTop(0); from before
});
测试理念:默认情况下,$ .ajax会异步触发,因此正在进行调用时正在执行其他操作。只是为了排除之后发生的其他事情重置滚动位置的可能性,您可以将async: false,
放在$ .ajax代码中。