Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect when user is starting/stopping typing in jquery

Once i was searching a solution for my issue and my issue was "I want to detect when user is typing and when he is stop typing so that i can update status."

I have created a sample. May it will work for you.

var typingTimer;
var doneTypingInterval = 10;
var finaldoneTypingInterval = 500;

var oldData = $("p.content").html();
$('#tyingBox').keydown(function() {
  clearTimeout(typingTimer);
  if ($('#tyingBox').val) {
    typingTimer = setTimeout(function() {
      $("p.content").html('Typing...');
    }, doneTypingInterval);
  }
});

$('#tyingBox').keyup(function() {
  clearTimeout(typingTimer);
  typingTimer = setTimeout(function() {
    $("p.content").html(oldData);
  }, finaldoneTypingInterval);
});



<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>



<textarea id="tyingBox" tabindex="1" placeholder="Enter Message"></textarea>
<p class="content">Text will be replace here and after Stop typing it will get back</p>

View on Fiddle : http://jsfiddle.net/utbh575s/

like image 592
Ambuj Khanna Avatar asked Oct 22 '14 07:10

Ambuj Khanna


People also ask

How do you know when someone stops typing?

One possible way is to attach a keyup event to the input element and send an HTTP request for each character entered to the server to fetch search results: const input = document. querySelector('#input-text'); // Listen for `keyup` event input.

How do you trigger an event in input text after quitting typing writing jquery?

post('/ajax/fetch', { type: 'username', value: _this. val() }, function(data) { if(! data. success) { // continue working } else { // throw an error } }, 'json'); }, 3000); });

How do you stop typing in Javascript?

step 1. set time out to null then clear the current timeout when the user is typing. step 2. trigger clear timeout to the variable define before keyup event is triggered.


1 Answers

Maybe what you want is the debounce functionality.

Basically it limits the rate at which a function can fire. So it waits a few ms before firing the event kind of like the user stopping the writing process.

Check this snippet

// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
function debounce(func, wait, immediate) {
	var timeout;
	return function() {
		var context = this, args = arguments;
		var later = function() {
			timeout = null;
			if (!immediate) func.apply(context, args);
		};
		var callNow = immediate && !timeout;
		clearTimeout(timeout);
		timeout = setTimeout(later, wait);
		if (callNow) func.apply(context, args);
	};
};

// This will apply the debounce effect on the keyup event
// And it only fires 500ms or half a second after the user stopped typing
$('#testInput').on('keyup', debounce(function () {
  alert('typing occurred');
  $('.content').text($(this).val());
}, 500));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="testInput" />

<p class="content"></p>

Basically now it's up to you. Set your own time in ms and you're good to go.

like image 116
João Cunha Avatar answered Sep 20 '22 04:09

João Cunha