1

新しいメッセージが届いたときに「トーク」タイトルの横に表示されるように、チャット ボックスの通知を作成しようとしています。私は決してうまくいかないことを複数試しました。

忙しい猫 http://goawaymom.com/damit.png

ここに私のコードがあります

$(document).ready(function(){
  //If user submits the form
  $("#submitmsg").click(function(){ 
    var clientmsg = $("#usermsg").val();
    $.post("post.php", {text: clientmsg});              
    $("#usermsg").attr("value", "");
    return false;
  });

  //Load the file containing the chat log
  function loadLog(){       
    $.ajax({
      url: "log.html",
      cache: false,
      success: function(html){     
        var chatbox= $("#chatbox");
        var atBottom = (chatbox[0].scrollHeight - chatbox.scrollTop() == chatbox.outerHeight());
        chatbox.html(html);

        if (atBottom )
          chatbox.animate({ scrollTop: 99999 }, 'normal');
      }
    });
  }
  setInterval (loadLog, 2500);  //Reload file every 2.5 seconds

  //If user wants to end session
  $("#exit").click(function(){
    var exit = confirm("Are you sure you want to end the session?");
    if(exit==true){window.location = 'index.php?logout=true';}
  });
});

私がこれについてどうするか知っている人はいますか?私がこれまでに試したことはすべて失敗しました。動作しない設定間隔機能を使用してみました。

4

2 に答える 2

0

それで、私の理解が正しければ、メッセージを送信すると log.html の最後に追加されるのでしょうか? あなたがやろうとしていることにはうまくいかないと思います。div の innerHTML をリロードするだけでなく、更新を確認できるように、新しい投稿を追跡するサービスが必要です。

それができたら、チャットがフォーカスされてから読み込んだ新しいメッセージの数を数え、チャットがフォーカスされるたびにそれを 0 にリセットできます。

document.title を使用してタイトルを更新できます。したがって、カウントを更新する必要があるときはいつでも、次のことができます

document.title = 'my normal title (' + newCount + ')';

簡単に言えば、これは JavaScript で解決できる問題ではありません。アプリを再設計する必要があります。

于 2012-09-19T18:54:11.063 に答える
0

あなたの質問は少し不完全/不明確です。「誰かがあなたに新しいメッセージを送信するたびに」と言うとき、新しいメッセージが表示されたときだけを意味しますか (あなたにとって必要ではなく、チャット ルーム全体のためです)。

そうであると仮定すると、誰かが何かを入力するたびに数字が増え続けます。

これは、開始するのに役立つコードです。あなたの質問では、その番号がいつリセットされるかを明確にしていないため、通知番号は減りません。

最後に次$(document).readyの行を追加します

// Load log and cache number of message on page when it first loaded
// Pass in a callback function to cache the message count. 
loadLog(function(){
  window.lastReadMessageCount = $('.msgln').length;
}); 

コールバックを受け取るように loadLog を更新します。

function loadLog(callback){
  ...
  success: function(html){
    if (callback) callback();
    ...
  }
  ...
}          

これで、ページが読み込まれたときにユーザーが見たメッセージの数がわかります。ページがチャットを更新するたびに、新しいメッセージ数を更新したいと考えています。

loadLog()で、次の行を最後に追加します

newMessagesCount = $('.msgln').length - lastReadMessageCount;
document.title = newMessagesCount > 0 ? 'title (' newMessagesCount ')' : 'title';

それでおしまい!あとは、いつ lastReadMessageCount を更新するかを明確にするだけです。

于 2012-09-19T19:34:13.837 に答える