1

jquery の append() 関数 i chrome に問題があります。

私はブラウザチャットに取り組んでおり、サーバーからロングポーリングでチャットメッセージを取得しています。クライアントが新しいメッセージを受け取ると、メッセージは特定のチャット インスタンス div に追加されます。

追加の直後に、chat_session_text の scrollTop、つまり「一番下までスクロール」を設定してスクロールしたいと考えています。これはほとんどのブラウザーで正常に機能しますが、chrome では機能しません。いくつかの調査の後、append() はクロムで同期していないように見えますか?

コードで scrollHeight をログに記録すると、div の間違った高さが表示されます。しかし、このコードをクロムコンソールに貼り付けると、正しい高さになります! したがって、追加された div で DOM の準備ができていないと思われます。

これが私のコードです:

var strHtmlToAppend = $('<div class="chat_message"><img class="imgThumb2" style="float:left;" src="UserImage.aspx?alias=' + fromUserID + '" border="0" alt="">' + strMsg + '</div>');
$('#' + elm + ' .chat_session_text').append(strHtmlToAppend);
console.log($('#' + elm + ' .chat_session_text').prop("scrollHeight")); 
$('#' + elm + ' .chat_session_text').prop({ scrollTop: $('#' + elm + ' .chat_session_text')[0].scrollHeight });

これを解決する方法を知っている人はいますか?DOM の準備ができたら、append() 関数のコールバックのようなものでしょうか?

ありがとう。

4

1 に答える 1

0

Chome (例: http://code.google.com/p/chromium/issues/detail?id=34224scrollHeight )ではあまりサポートされていないようで、append() が非同期であるという主張はサポートされていないことがわかりました。コンソールが開いているという事実は、ページ全体の動作を変更する (異なる高さ) でしょうか?

プロパティに直接アクセスする代わりに、jQuery が提供する関数を使用することをお勧めします。http://api.jquery.com/height/ はゲッター、http: //api.jquery.com/scrollTop/はセッターです。

于 2012-06-14T13:31:34.523 に答える