From 8e3042cab5ab42f33c395111b6ef4f4592595200 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Wed, 10 Mar 2010 11:41:14 +0200 Subject: [PATCH] perfected keyboard navigation --- suggest_results/jquery.suggest_results.js | 33 ++++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/suggest_results/jquery.suggest_results.js b/suggest_results/jquery.suggest_results.js index f17a7ca..561f188 100644 --- a/suggest_results/jquery.suggest_results.js +++ b/suggest_results/jquery.suggest_results.js @@ -16,15 +16,14 @@ }; }).blur(function(){ self.hide(); - }).keyup(function(e){ - var TAB = 9; + }).keydown(function(e){ var RETURN = 13; var ESC = 27; var ARRUP = 38; var ARRDN = 40; switch(e.keyCode) { - case ARRUP: self.select_prev($options); return false; - case ARRDN: self.select_next($options); return false; + case ARRUP: self.select_prev($e, $options); return false; + case ARRDN: self.select_next($e, $options); return false; case ESC: self.clear($e, $options); break; case RETURN: self.activate_selected($options); return false; default: @@ -56,9 +55,7 @@ if (typeof(options.url) === "string" && options.url !== "") { //TODO support fetching results from server-side } else { - console.log(options.data); var results = self.filter_data(terms, options.data, options); - console.log(results); }; self.current_results = results; if (results.length > 0) { @@ -132,10 +129,9 @@ }, 500); }; - $.fn.suggest_results.select_next = function(options){ + $.fn.suggest_results.select_next = function(elm, options){ var self = $.fn.suggest_results; var limit = self.current_results.length; - console.log(limit); if (limit > 0) { if (self.selected_result === null) { self.selected_result = 0; @@ -149,10 +145,9 @@ return false; }; - $.fn.suggest_results.select_prev = function(options){ + $.fn.suggest_results.select_prev = function(elm, options){ var self = $.fn.suggest_results; var limit = self.current_results.length; - console.log(limit); if (limit > 0) { if (self.selected_result === null) { self.selected_result = limit - 1; @@ -161,6 +156,10 @@ $(".selected", self.box).removeClass("selected"); self.selected_result--; $("#suggested_result_" + self.selected_result, self.box).addClass("selected"); + } else { + $(".selected", self.box).removeClass("selected"); + self.selected_result = null; + elm.putCursorAtEnd(); }; }; return false; @@ -249,6 +248,20 @@ }; }; + // "borrowed" from PutCursorAtEnd plugin: http://plugins.jquery.com/project/PutCursorAtEnd + $.fn.putCursorAtEnd = function(){ + return this.each(function(){ + $(this).focus(); + if (this.setSelectionRange) { + var len = $(this).val().length * 2; + this.setSelectionRange(len, len); + } else { + $(this).val($(this).val()); + } + this.scrollTop = 999999; + }); + }; + $.fn.suggest_results.defaults = { delay: 150, limit: 6,