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) {