0
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 的底部。任何想法?

4

1 回答 1

1

假设您实际上正在调用merrmesazhet()并且您正在测试,IE>=8因为较低版本不支持scrollHeight. 那么你的主要问题是使用setTimeout它本质上是每秒调用ereja一次并且什么都不做。

实际上,您甚至不需要 JS 计时器 - 您使用的是支持回调load函数的 jQuery(它在成功加载时执行一次,而不是重复执行)。您当前形式的 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);
            }
        }
    );
}

jsFiddle

于 2013-08-25T11:51:35.630 回答