perfected keyboard navigation

This commit is contained in:
2010-03-10 11:41:14 +02:00
parent f90620949f
commit 8e3042cab5

View File

@@ -16,15 +16,14 @@
}; };
}).blur(function(){ }).blur(function(){
self.hide(); self.hide();
}).keyup(function(e){ }).keydown(function(e){
var TAB = 9;
var RETURN = 13; var RETURN = 13;
var ESC = 27; var ESC = 27;
var ARRUP = 38; var ARRUP = 38;
var ARRDN = 40; var ARRDN = 40;
switch(e.keyCode) { switch(e.keyCode) {
case ARRUP: self.select_prev($options); return false; case ARRUP: self.select_prev($e, $options); return false;
case ARRDN: self.select_next($options); return false; case ARRDN: self.select_next($e, $options); return false;
case ESC: self.clear($e, $options); break; case ESC: self.clear($e, $options); break;
case RETURN: self.activate_selected($options); return false; case RETURN: self.activate_selected($options); return false;
default: default:
@@ -56,9 +55,7 @@
if (typeof(options.url) === "string" && options.url !== "") { if (typeof(options.url) === "string" && options.url !== "") {
//TODO support fetching results from server-side //TODO support fetching results from server-side
} else { } else {
console.log(options.data);
var results = self.filter_data(terms, options.data, options); var results = self.filter_data(terms, options.data, options);
console.log(results);
}; };
self.current_results = results; self.current_results = results;
if (results.length > 0) { if (results.length > 0) {
@@ -132,10 +129,9 @@
}, 500); }, 500);
}; };
$.fn.suggest_results.select_next = function(options){ $.fn.suggest_results.select_next = function(elm, options){
var self = $.fn.suggest_results; var self = $.fn.suggest_results;
var limit = self.current_results.length; var limit = self.current_results.length;
console.log(limit);
if (limit > 0) { if (limit > 0) {
if (self.selected_result === null) { if (self.selected_result === null) {
self.selected_result = 0; self.selected_result = 0;
@@ -149,10 +145,9 @@
return false; return false;
}; };
$.fn.suggest_results.select_prev = function(options){ $.fn.suggest_results.select_prev = function(elm, options){
var self = $.fn.suggest_results; var self = $.fn.suggest_results;
var limit = self.current_results.length; var limit = self.current_results.length;
console.log(limit);
if (limit > 0) { if (limit > 0) {
if (self.selected_result === null) { if (self.selected_result === null) {
self.selected_result = limit - 1; self.selected_result = limit - 1;
@@ -161,6 +156,10 @@
$(".selected", self.box).removeClass("selected"); $(".selected", self.box).removeClass("selected");
self.selected_result--; self.selected_result--;
$("#suggested_result_" + self.selected_result, self.box).addClass("selected"); $("#suggested_result_" + self.selected_result, self.box).addClass("selected");
} else {
$(".selected", self.box).removeClass("selected");
self.selected_result = null;
elm.putCursorAtEnd();
}; };
}; };
return false; 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 = { $.fn.suggest_results.defaults = {
delay: 150, delay: 150,
limit: 6, limit: 6,