【发布时间】:2012-06-12 16:08:45
【问题描述】:
链接到problem:
在 jQuery 对话框中使用 .scrollTop() 方法对我不起作用,HTML 标记是这样的:
<div id="toogleMAmaximized" style="background:#000000">
<div id="missionsMinimized" style="display:none;margin-top:10px;margin-bottom: 10px;cursor:pointer"><img src="images/missionsMinimized.png" alt="missions"/></div>
<div id="achivmentsMinimized" style="display:none;margin-top:5px;cursor:pointer"> <img src="images/achivmentsMinimized.png" /></div>
<div id="missions" class="unselected MAmaximized"></div>
<div id="achivments" class="unselected MAmaximized"></div>
<div id="dataMA" style="position:absolute;top:10px;right:10px;display:none;width:850px;height:500px;background-image: url('images/background-home.png') ; overflow-y:scroll"></div>
</div>
我使用 JavaScript 函数来填充 dataMA div。
function populateMissionsData(){
$('#missions').empty();
$('#dataMA').append('<h1 style="color:white">Current Missions:</h1>');
for (var $key in missionData['current']){
$('#dataMA').append(missionData['current'][$key]);
}
$('#dataMA').append('<h1 style="color:white">Not started missions:</h1>');
for (var $key in missionData['other']){
$('#dataMA').append(missionData['other'][$key]);
}
$('#dataMA').append('<h1 style="color:white">Ccompleted Missions:</h1>');
for (var $key in missionData['completed']){
$('#dataMA').append(missionData['completed'][$key]);
}
}
这很好用,因为我可以毫无问题地填充我的 dataMA。现在我有一个按钮,可以扩展 dataMA 中使用livequery 插件的 div 的内容,这里是滚动问题:
$(".plus").livequery('click',(function(){
key = $(this).attr('key').toString();
$('#data'+ key).slideToggle('fast');
//this is the problem, it does not scroll the dialog.
$('#dataMA').scrollTop($('#data'+ key).offset().top);
//Update - this does not work either
$('#dataMA').scrollTop($('#dataMA')[0].scrollHeight);
//Update 100 - This is not working either
$('#dataMA').scrollTop($('#data'+ key).offset().top - $('#dataMA').offset().top + $('#dataMA').scrollTop());
$(this).toggleClass('less')
if($(this).hasClass('less')){
$(this).attr('src','images/less.png');
}else{
$(this).attr('src','images/plus.png');
}
}));
当我触发加号按钮时,它不会滚动,但是当我再次单击加号按钮时,它就像向下滚动和向上滚动一样。
我已将 dataMA 选择器更改为 toogleMAmaximized ,它滚动但没有按预期滚动(它向上移动了其中的内容)
更新 1
如果您有兴趣,我的环境:
jQuery v1.7.1
jQuery UI1.8.16
liveQuery1.1.1
更新 2
我将环境更新为最新版本的jQuery (1.7.2) 和jQuery UI (1.8.21),仍然遇到同样的问题。
更新 3
好的,我有一个fiddle 文件供你们查看问题。在我的小屏幕上无法正确显示,希望你们能做得更好。首先是点击右边的图片,然后点击第一个方块。要查看滚动问题,请单击标题上的任何非加载图标(它们具有 plus 类)。 dataMA 变量是我对数据库的查询的替换,它在结果中返回我放在那里的字符串。我使用livequery,因为在使用.post() 请求添加的标签上使用.on() 有很多问题。
更新 4 分辨率高于 1300x768 的任何人都可以告诉我他们是否正确获取了 jsfiddle 文件吗?我没能解决这个问题。
更新 5
我可以滚动几个元素,但是当它在包含的 div 之外的元素时,它不会滚动到,但是如上所述,当我再次点击按钮时,它会尝试向上滚动。
更新 6
为了更好的理解我更新了jsfiddle,过程是一样的:点击图片->弹出对话框->点击任务->向下滚动到最后一个(厚墙)->点击缺少的右边的图像(我不知道为什么它不显示 alt 内容)这样做会显示一个隐藏的内容,再次单击它会隐藏它。但是自动滚动没有完成。
【问题讨论】:
-
试试 $("#container").scrollTop($("#container")[0].scrollHeight);
-
@DhirajBodicherla 它和 .offset().top 做同样的事情
-
尝试创建 jsfiddle.net。您提供的代码不完整。此外,根据您的要求,您可以使用本机 jquery 函数而不是“livequery”
-
@r0m4n 按照建议完成。谢谢。
标签: jquery jquery-ui dialog scrolltop