2017-06-29 7 views
0

私はチャットアプリケーションで仕事をしようとしていて、nodejsでsocket.ioと仕事をすることを学んでいました。今、私はユーザーがキーボード上の任意のキーを押したときに '入力メッセージ'を表示することができました。しかし、ユーザーが入力をやめたり、Enterボタンをクリックしてメッセージを送信したりすると、キーアップイベントやキーリリースイベントが呼び出されます。私は以下を試しましたが、私の<em>タグ内のテキストを変更していないようです。ユーザーが送信を押しても、「ユーザーは入力しています」と表示されます。KeydownイベントJqueryノードjs?

message.addEventListener('keypress', function(){ 
    socket.emit('typing', handle.value); 
}); 

message.addEventListener('keyup', function(){ 
    feedback.innerHTML = '<p><em></em></p>'; 
}); 


socket.on('typing', function(data){ 
    feedback.innerHTML = '<p><em>' + data + ' is typing a message...</em></p>'; 
}); 
+0

ユーザーの入力ボックスが空でないかどうかを確認して「ユーザーが入力しています」と表示すると、 – jrenk

+0

それはうまくいかないでしょう。ユーザーがテキストを入力してから1分間停止すると、ユーザーが別のタブに切り替えた場合でも入力が続けられます。 –

+0

@NicolaiSchmid: - それは私が直面している問題です – Rehma

答えて

2

setTimeout機能を使用できます。したがって、ユーザーが入力を停止すると、イベントは500ms後に発生し、バックエンドで適切に処理できます。ユーザーが入力を開始すると、timeoutがクリアされ、イベントstopped typingはバックエンドに送信されません。

私は上記の考えをコードに提供します。

var timeout; 
$("#input").keyup(function() { 
    timeout = setTimeout(function(){ socket.emit("stopped typing") }, 500); 
}); 

$("#input").keydown(function() { 
    clearTimeout(timeout); 
}); 
+0

それは私がデバウンシング –

関連する問題