diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js
index 4b69d823..3a3da8df 100755
--- a/src/jquery.tokeninput.js
+++ b/src/jquery.tokeninput.js
@@ -112,8 +112,9 @@
UP : 38,
RIGHT : 39,
DOWN : 40,
- NUMPAD_ENTER : 108,
- COMMA : 188
+ DELETE : 46,
+ COMMA : 188,
+ PERIOD : 190
};
var HTML_ESCAPES = {
@@ -246,9 +247,10 @@
// Keep track of the timeout, old vals
var timeout;
var input_val;
+ var xhr;
// Create a new text input an attach keyup events
- var input_box = $("")
+ var input_box = $("")
.css({
outline: "none"
})
@@ -277,7 +279,7 @@
var previous_token;
var next_token;
- switch(event.keyCode) {
+ switch(event.which) {
case KEY.LEFT:
case KEY.RIGHT:
case KEY.UP:
@@ -289,22 +291,22 @@
if((previous_token.length && previous_token.get(0) === selected_token) ||
(next_token.length && next_token.get(0) === selected_token)) {
// Check if there is a previous/next token and it is selected
- if(event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) {
+ if(event.which === KEY.LEFT || event.which === KEY.UP) {
deselect_token($(selected_token), POSITION.BEFORE);
} else {
deselect_token($(selected_token), POSITION.AFTER);
}
- } else if((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) {
+ } else if((event.which === KEY.LEFT || event.which === KEY.UP) && previous_token.length) {
// We are moving left, select the previous token if it exists
select_token($(previous_token.get(0)));
- } else if((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) {
+ } else if((event.which === KEY.RIGHT || event.which === KEY.DOWN) && next_token.length) {
// We are moving right, select the next token if it exists
select_token($(next_token.get(0)));
}
} else {
var dropdown_item = null;
- if (event.keyCode === KEY.DOWN || event.keyCode === KEY.RIGHT) {
+ if (event.which === KEY.DOWN || event.which === KEY.RIGHT) {
dropdown_item = $(dropdown).find('li').first();
if (selected_dropdown_item) {
@@ -335,17 +337,11 @@
}
return false;
- } else if($(this).val().length === 1) {
- hide_dropdown();
- } else {
- // set a timeout just long enough to let this function finish.
- setTimeout(function(){ do_search(); }, 5);
}
break;
case KEY.TAB:
case KEY.ENTER:
- case KEY.NUMPAD_ENTER:
case KEY.COMMA:
if(selected_dropdown_item) {
add_token($(selected_dropdown_item).data("tokeninput"));
@@ -363,19 +359,31 @@
return true;
}
}
- event.stopPropagation();
- event.preventDefault();
}
return false;
case KEY.ESCAPE:
hide_dropdown();
return true;
-
+ }
+ })
+ .keyup(function (event) {
+ switch(event.which) {
+ case KEY.LEFT:
+ case KEY.RIGHT:
+ case KEY.UP:
+ case KEY.DOWN:
+ case KEY.TAB:
+ case KEY.ENTER:
+ case KEY.COMMA:
+ case KEY.ESCAPE:
+ break;
+ case KEY.BACKSPACE:
+ do_search();
+ break;
default:
if (String.fromCharCode(event.which)) {
- // set a timeout just long enough to let this function finish.
- setTimeout(function(){ do_search(); }, 5);
+ do_search();
}
break;
}
@@ -949,7 +957,10 @@
// than $(input).data("settings").minChars
function do_search() {
var query = input_box.val();
-
+ if(xhr) {
+ xhr.abort();
+ }
+ clearTimeout(timeout);
if(query && query.length) {
if(selected_token) {
deselect_token($(selected_token), POSITION.AFTER);
@@ -957,8 +968,6 @@
if(query.length >= $(input).data("settings").minChars) {
show_dropdown_searching();
- clearTimeout(timeout);
-
timeout = setTimeout(function(){
run_search(query);
}, $(input).data("settings").searchDelay);
@@ -1038,7 +1047,7 @@
}
// Make the request
- $.ajax(ajax_params);
+ xhr = $.ajax(ajax_params);
} else if($(input).data("settings").local_data) {
// Do the search through local data
var results = $.grep($(input).data("settings").local_data, function (row) {