Notice This is a beta feature offered by Google. Also this is automatic translation, which means the results are often inacurate and/or hilarious. Enjoy.

delayed-observer.js

jQuery

This is a basic delayed observer for jQuery.

Example

Here a very simple example of how you can use this script:

<input type="text" id="input-A" />
<input type="text" id="input-B" />
$(document).ready(function(){

	$('#input-A').delayedObserver(0.8,
		function(value, object) {
			$('#input-B').val(value);}});

Source code

/*
 jQuery delayed observer - 0.3
 (c) 2007 ~ Maxime Haineault (haineault@gmail.com)
 
 MIT License (http://www.opensource.org/licenses/mit-license.php)
 
 changelog
 ---------
 0.2 using closure, special thanks to Stephen Goguen & Tane Piper.
 0.3 now allow object chaining, added license
*/

(function() {
  var delayedObserverStack = [];
  var observed;
 
  function delayedObserverCallback(stackPos) {
    observed = delayedObserverStack[stackPos];
    if (observed.timer) clearTimeout(observed.timer);
   
    observed.timer = setTimeout(function(){
      observed.timer = null;
      observed.callback(observed.obj.val(), observed.obj);
    }, observed.delay * 1000);

    observed.oldVal = observed.obj.val();
  } 
 
  jQuery.fn.extend({
    delayedObserver:function(delay, callback){
      $this = $(this);
     
      delayedObserverStack.push({
        obj: $this, timer: null, delay: delay,
        oldVal: $this.val(), callback: callback
      });
       
      stackPos = delayedObserverStack.length-1;
     
      $this.keyup(function() {
        observed = delayedObserverStack[stackPos];
          if (observed.obj.val() == observed.obj.oldVal) return;
          else delayedObserverCallback(stackPos);
      });
      return this;
    }
  });
})();

Download

I've made some code cleanup and added support for custom events (other than keyup) in 0.4, it's still untested for now. But feel free to play with and report me bugs/improvments. Thanks.

Nothing has changed in the API, except that now it takes a third optional parameter to specify the event type ex: {event:'keyup'}. Should be 100% compatible with preview versions.

Source code

/*
 jQuery delayed observer - 0.4
 (c) 2007 ~ Maxime Haineault (haineault@gmail.com)
 
 MIT License (http://www.opensource.org/licenses/mit-license.php)
 
 changelog
 ---------
 0.2 using closure, special thanks to Stephen Goguen & Tane Piper.
 0.3 now allow object chaining, added license
 0.4 code cleanup, added support for other events than keyup
*/

(function() {
  var stack = [], target;
 
  function callback(pos) {
    target = stack[pos];
    if (target.timer) clearTimeout(target.timer);
   
    target.timer = setTimeout(function(){
      target.timer = null;
      target.callback(target.obj.val(), target.obj);
    }, target.delay * 1000);

    target.oldVal = target.obj.val();
  } 
 
  jQuery.fn.extend({
    delayedObserver:function(delay, callback, opt){
      $this = $(this), event = opt.event || 'keyup';
      
      stack.push({
        obj:    $this, timer: null, delay: delay,
        oldVal: $this.val(), callback: callback});
       
      pos = stack.length-1;
     
      $this.[event](function() {
        target = stack[pos];
          if (target.obj.val() == target.obj.oldVal) return;
          else callback(pos);
      });
      return this;
    }
  });
})();

Copyrighted stuff .. u know.