2012-02-06 3 views
0

텍스트 영역에 문자가 하나 이상있는 경우 텍스트 영역이 비어 있고 "다른 사용자가 입력 중"인 경우 "다른 사용자는 입력하지 않습니다"라는 채팅을 구현할 수 있습니까?비어있는 텍스트 영역에 대한 기능

먼저, 사용자가 키를 누르면 매 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

관련 문제