1

チャットボックスにこれが必要です。ユーザーがEnterキーを押したときに、コールバックをトリガーしたい(メッセージを送信して入力フィールドを消去するため)

これまでのところ、これを取得しましたが、入力が遅くなります:

$('#chat_input').keydown(function(event) {
  if(event.keyCode == '13') {
    // do something
  }
});

これをどのように最適化しますか?

更新:大幅な減速ではありませんが、それを感じることができます. このコードが原因であると確信しています。私はいつもこの問題を抱えていたので、可能であれば別の方法を見つける時が来たと思いました.

4

2 に答える 2

3

いいえ、あなたのコードはここで有罪ではありません。チャット システムを構築しているので、他のスクリプトも実行する必要があります。しかし、ここで問題を調べる別の方法があります。

ミニフォームを作る

<form name="chatline" ... >
   <input type="text" />
   <input type="submit" />
</form>

次に、ブラウザによって自動的に入力時にトリガーされるフォームの送信イベントをキャッチします

$("form").submit(function() {
    //there you go, you caught your enter
});
于 2012-04-05T23:37:51.323 に答える
0

私はこれを試してみます:

document.onkeydown = function(event) {
  if(event.keyCode == '13') {
    // do something
    return false;
  }
};

これにより、イベント リスナーが DOM グラフの最上位に配置され、最初に応答する機会が与えられます。falseを返すと、イベントが処理されたこともブラウザーに通知されます。これにより、イベントについて他の要素に「尋ねる」ことができなくなります。また、jQuery を捨ててイベントを直接管理することで、必要以上の JS の実行を回避できます。

これでも遅い場合は、他の場所にロジックがあり、速度が低下していると考えなければなりません。これがチャットの場合、チャット本文に DOM 要素を追加/再配置すると、ブラウザのオーバーヘッドが大幅に増加する可能性があります。setIntervalを使用して、数秒ごとに「入力」ロジックをトリガーしてみてください。入力してみてください (メッセージがランダムに送信されます) が、それでもスローダウンが発生する場合は、他のロジックに違いありません。

于 2012-04-05T23:55:11.920 に答える