3
* JQuery QuickSearch - Hook up a form field to hide non-matching elements.
4
* $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $
6
* Author: Michael Granger <mgranger@laika.com>
9
jQuery.fn.quicksearch = function( target, searchElems, options ) {
10
// console.debug( "Quicksearch fn" );
15
highlightMatches: false,
17
noSearchResultsIndicator: null
19
if ( options ) $.extend( settings, options );
21
return jQuery(this).each( function() {
22
// console.debug( "Creating a new quicksearch on %o for %o", this, searchElems );
23
new jQuery.quicksearch( this, searchElems, settings );
28
jQuery.quicksearch = function( searchBox, searchElems, settings ) {
30
var boxdiv = $(searchBox).parents('div').eq(0);
33
setupKeyEventHandlers();
37
function setupKeyEventHandlers() {
38
// console.debug( "Hooking up the 'keypress' event to %o", searchBox );
41
keyup( function(e) { return onSearchKey( e.keyCode ); });
44
keypress( function(e) {
46
// Execute the search on Enter, Tab, or Newline
50
clearTimeout( timeout );
60
// Only allow valid search characters
62
return validQSChar( e.charCode );
67
function focusOnLoad() {
68
if ( !settings.focusOnLoad ) return false;
72
function onSearchKey ( code ) {
73
clearTimeout( timeout );
74
// console.debug( "...scheduling search." );
75
timeout = setTimeout( doQuickSearch, settings.delay );
78
function validQSChar( code ) {
79
var c = String.fromCharCode( code );
82
(c >= 'a' && c <= 'z') ||
83
(c >= 'A' && c <= 'Z')
87
function doQuickSearch() {
88
var searchText = searchBox.value;
89
var pat = new RegExp( searchText, "im" );
92
if ( settings.noSearchResultsIndicator ) {
93
$('#' + settings.noSearchResultsIndicator).hide();
96
// All elements start out hidden
97
$(searchElems).each( function(index) {
98
var str = $(this).text();
100
if ( pat.test(str) ) {
108
if ( shownCount == 0 && settings.noSearchResultsIndicator ) {
109
$('#' + settings.noSearchResultsIndicator).slideDown();