2012-02-06 4 views
0

テキストエリアに少なくとも1つの文字が含まれていると、そのテキストエリアが空で「他のユーザーが入力している」ときに「他のユーザーは入力していません」というチャットで実装する方法はありますか?空のテキストエリアの機能

まず、ユーザーがキーを押しているときに2秒ごとにチェックすることでこの「入力しています」機能を実装したかったが、チャットをあまりにも遅くすることがわかった。テキストエリアが空でない(ユーザが入力している)とき、空で何もしないときに情報を取得する簡単な方法ですか?

ありがとうございます。

+2

は 'keydown'ハンドラを使用してください。ユーザーがテキストボックスに文字を入力する場合は、「入力しています」というメッセージを送信し、ユーザーがテキストボックスを空にした場合は、空のメッセージを送信します(メッセージ出力を消去する)。 –

+0

ありがとう、私はこれもコードを作成できるかどうかを試してみます。 – Ingrid

答えて

2

最初にkeyupに「入力しています」というメッセージを送信し、window.setTimeoutを使用して10秒後に「入力しない」というメッセージを送信します。すべてのキーアップ時にsetTimeoutをキャンセルして再スケジュールします。

以下のテストされていない例:

var input = document.getElementById('typeeBox'); 
var isTyping = false; 
var timeoutId = 0; 

function stoppedTyping() { 
    isTyping = false; 
    // Send not typing message. 
    // Update db status. 
} 

function startedTyping() { 
    if (!isTyping) { 
     // Send is typing message. 
     // Update db status. 
     isTyping = true; 
     timeoutId = window.setTimeout(stoppedTyping, 10000); 
    } else { 
     window.clearTimeout(timeoutId); 
     timeoutId = window.setTimeout(stoppedTyping, 10000); 
    } 
} 

input.addEventListener('keyup', startedTyping, false); 
+0

ありがとう、私は今すぐこのコードをテストするつもりです。簡単な質問ですが、タイムアウトはチャットで既に持っているタイマーに影響しますか?ちょうどその時に、私はそれなしでコードを試してみます。 – Ingrid

+0

'setTimeout'は、あなたがすでに実行しているものに加えて、実行するために別の関数を単にスケジュールする必要があります。同様に、 'clearTimeout'は、渡された' timeoutId'によって実行される関数だけをクリアします。 – pete

+0

ありがとう、私はすぐにフィードバックに戻ってきます! – Ingrid

関連する問題