function ereja(){
var newscrollHeight2 = $("#messages")[0].scrollHeight;
return newscrollHeight2;
}
var newscrollHeight = ereja();
var oldscrollHeight = $("#messages")[0].scrollHeight;
function merrmesazhet(){
$('#messages').load(
"nxirr_mesazhet.php?room=<?php echo urlencode($dhoma24); ?>"
);
setTimeout(ereja, 1000);
if( newscrollHeight != oldscrollHeight ){
$("#messages").scrollTop($("#messages")[0].scrollHeight);
}
}
这段代码有什么问题?为什么它不起作用?当用户写入新消息时,我试图滚动到div的底部。有什么想法吗?
答案 0 :(得分:1)
假设您实际上正在呼叫merrmesazhet()
并且您正在IE>=8
进行测试,因为较低版本不支持scrollHeight
。然后你的主要问题是使用setTimeout
,它基本上每秒调用ereja
并且 nothing 。
确实你甚至不需要JS计时器 - 你正在使用支持回调的jQuery load
函数(在成功加载时执行一次而不是反复)。您在其当前表单中的if语句将始终评估为 false ,因为它不在计时器上执行的函数内。
这样的事可能适合你:
var oldscrollHeight = $("#messages")[0].scrollHeight;
function merrmesazhet(){
$('#messages').load(
'nxirr_mesazhet.php?room=<?php echo urlencode($dhoma24); ?>',
function(){
var newscrollHeight = $("#messages")[0].scrollHeight;
if( newscrollHeight != oldscrollHeight ){
$("#messages").scrollTop($("#messages")[0].scrollHeight);
}
}
);
}