2015-10-05 105 views
1

我有一种感觉什么曾经给我的问题,我试图找到一个解决方案在这个问题 - Can't trigger a jquery function with scroll on a particular div - 可能负责滚动相关的问题在这里。.scrollTop(0)不工作让一个div滚动到顶部

短版:无法获得此,或任何类似,工作

$("#Container3").scrollTop(0); 

什么也没有发生真正的,没有错误在控制台,没有怪异的行为,只是似乎忽略了scrollTop的(0)请求。

龙版本:我很抱歉,但因为它是一个复杂的应用程序一样的界面,但我会尽力解释这个问题,以我的能力张贴代码片段是不可行的:

  • 移动响应式网站,根据屏幕的不动产加载不同的界面。
  • 最小的界面由3部分组成 - 顶部导航,底部搜索和中间内容。
  • 内容大多在使用过程中加载,而不是在页面加载时加载。
  • 在按下重新加载特定div内容的按钮时,为了便于使用,我还需要将该div滚动到顶部。
  • 虽然它似乎没有影响我的问题(删除它并没有解决问题),我应该透露我使用hammer.js来模拟触摸事件,因为它可能会影响解决方案。

加载是在视口之外完成的,所以不需要动画,但只要他们得到这个工作,我就会带着它们。

这是我的jQuery的要求是什么样子

$(document).on("click",".NavRowButton",function(event){ 
    $("#Container3").scrollTop(0); 
    var $targetButtonId=$(event.target).attr("id"); 
    $("#Content").load("/load/login/"+$targetButtonId+".php"); 
    $("#DisplayContentName").html("<span class='NavColSpan'>"+$targetButtonId+"</span>"); 
    $("#Container3").find(".WindowBorder").css("top","0"); 
}); 

#Container3有滚动条,是#内容的直接父。

这是一个功能我还在建设,是这个问题我之前也有过,我使用的是什么,现在来帮助调试这个问题的解决方法:

document.addEventListener('scroll',function(event){ 
    if(event.target.className==='Container'){ 
     var $currentScroll=$(event.target).scrollTop(); 
     console.log($currentScroll); 
     var $targetId=$(event.target).attr("id"); 
     console.log($targetId); 
    } 
},true); 

在此先感谢。

编辑︰我只注意到,如果我把一个$(event.target).scrollTop(0);在滚动距离调试功能结束时,它实际上重置了滚动,所以似乎只要div是event.target,它可以从外部工作,因为在点击功能期间我可能不会适当地选择它。

EDIT2:正好我可以缓存event.targets到变量,并用获得()点击功能我敢肯定,我选择合适的元素,以便它只是留下里面怎么scrollTop的(0 )方法起作用。

他们现在这个样子(也有添加一个条件来限制负载事件):

全局变量:

$DivTestVar=""; 

点击:

$(document).on("click",".NavRowButton",function(event){ 
    var $targetButtonId=event.target.id; 
    if($targetButtonId != $("#DisplayContentName").html()){ 
     $($DivTestVar).scrollTop(0); 
     console.log($($DivTestVar).get()); 
     $("#Content").load("/load/login/"+$targetButtonId+".php"); 
     $("#DisplayContentName").html($targetButtonId); 
     $("#Container3").find(".WindowBorder").css("top","0"); 
    }; 
}); 

滚动调试:

document.addEventListener('scroll',function(event){ 
    if(event.target.className==='Container'){ 
     $DivTestVar=event.target; 
     var $currentScroll=$($DivTestVar).scrollTop(); 
     console.log($currentScroll); 
     var $targetId=event.target.id; 
     console.log($targetId); 
    } 
},true); 

如果在滚动console.log($($ DivTestVar).get())之前单击,返回空,但如果在第一次滚动它开始返回正确的DOM元素。无论如何,scrollTop(0)都将被忽略。

编辑3:我只想留下一个小小的更新。我已经放弃了我在这里尝试使用类似效果的方法,但不像我试图实现的那样友好。因此,我不再关心这个人,但如果你正在阅读这个问题并且有类似的问题,我已经多次遇到这个问题以达到较小的效果,现在我认为它与position有关:fixed;元素以及scrollTop()是如何处理的,但我没有时间深入研究它,所以祝你好运和神速。

+0

很想看到一个jsfiddle展示问题。 – davidkonrad

+1

标记为:*寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。 ]你的问题要包括一个JS/HTML/CSS代码片段来重现错误(使用最少量的代码)。见[mcve]。 – BSMP

+0

“不起作用”不是很具描述性。描述_精确_发生了什么,以及它与你的希望和梦想有什么不同! –

回答

3

你试过纯JS版吗?

document.getElementById('Container').scrollTop = 0 
+0

我其实没有,没有遇到它,所以它从来没有真正跨过我的脑海去尝试它。在任何情况下,它也不起作用:| –

+0

尝试使用scrollTop(0)重新加载div #Container内容 – Gael

+0

试过了,不起作用。:|我会像这样离开它,以确保它不会造成最坏的情况。 –

1

据我所知,您有两种可能性。

1-滚动整个页面,直到用jQuery到达您的#Content div位置的顶部。

2-你的#Content是在一个div内的滚动,其中scrollTop(0)将为此工作(例如:http://jsfiddle.net/zkp07abu/)。

+0

不幸的是,我不能滚动整个页面,因为我要有超过1个可滚动的div。我也很确定我选择了正确的div,因为我实际上是console.logging同一个div的scrollTop()值,以帮助调试另一个函数。我只是想在继续之前我应该​​照顾这个。 –

+0

另一种可以尝试的方式是,如果它在单击按钮后滚动,则可以找到父级或兄弟“#Content”,根据body/html获取顶部,并将scrollTop等于该变量。 – Cheshire

+0

我添加了对问题的看法的简要说明。 #Content树上的任何内容都不会滚动,所以我只能控制#Container3上的滚动。将scrollTop设置为0是唯一的出路,如果我无法做到这一点,我将不得不改变我在界面的这一部分中看待的方式。 –