Skip to content

Instantly share code, notes, and snippets.

@tmpvar
Created February 9, 2010 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tmpvar/299539 to your computer and use it in GitHub Desktop.
Save tmpvar/299539 to your computer and use it in GitHub Desktop.
filterlist jquery plugin
/**
* jQuery-Plugin "filterlist"
*
* @version: 1.0, 09.11.2009
*
* @author: Eli Insua
* elijahi@arc90.com
*
*
* @example: $('#selector').filterlist({
url: function (element) { return 'datasource.php?q=' + element.val(); },
resetUrl: 'datasource.php'
dataType: 'json',
success: function(data) { onSuccess(data) },
timeout: 200,
minChars: 3
});
*
*/
(function(jQuery) {
jQuery.fn.filterlist = function(options){
var settings = jQuery.extend({ url: "datasource.php", // string or function that returns one
resetUrl: "datasource.php",
dataType: "json",
success: null,
before: null,
timeout: 200,
minChars: 5
}, options);
jQuery(this).each(function() {
// store off the element (local scope)
var _element = jQuery(this);
// each element gets its own timer (probably not requried)
var elementsTimer = null;
jQuery(this).bind("filterlist.clear", function() {
// reset timer
clearTimeout(elementsTimer);
// clear the element's value
//_element.val('');
// get the default dataset
jQuery.ajax({
dataType: settings.dataType,
success: settings.success,
url: (jQuery.isFunction(settings.resetUrl)) ? settings.resetUrl(_element) : settings.resetUrl
});
});
// track keyup
jQuery(this).keyup(function() {
// reset timer
clearTimeout(elementsTimer);
if (_element.val().length >= settings.minChars) {
// Call the before action, if any
(jQuery.isFunction(settings.before)) ? settings.before() : null;
// set the timer again, when it expires make the request
setTimeout(function() {
jQuery.ajax({
dataType: settings.dataType,
success: settings.success,
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert(textStatus);
},
url: (jQuery.isFunction(settings.url)) ? settings.url(_element) : settings.url + _element.val()
});
}, settings.timeout);
}
});
});
// chainable
return this;
};
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment