javascript - Stop returning to executing code -
i have "auto-suggest" input. on keyup in settimeout function ajax request made. if key enter search desired , suggestions should hidden.
the problem is, if type fast enough, when pressing enter "auto-suggest" still shown. guessing second keyup(enter) triggered before first handler has chance stop execution, first search triggered , after "auto-suggest" triggered.
how can prevent program return , execute first handler?
edit
here part of code:
searchtextinput.bind("keyup.qssb", function(event){ cleartimeout(suggesttimeout); switch(event.keycode){ case 40: <select option down>; break; case 38: <select option up>; break case 13: jquery(widget).trigger("search"); break; default: <do things>; suggesttimeout = settimeout(startsearch, 200); break; } });
assuming problem described, there 2 things (together) address it:
when send ajax request, store reference request. when receive keyup, cancel ajax request.
when start executing onenter handler, set variable indicate auto-suggestions no longer needed. in auto-suggest handler, after ajax returns, show suggestions if variable not set.
essentially, code structure (note pseudocode , not meant copied application):
var ajaxreq == null; var needsuggestions = true; $('#textfield').on("keyup", function(e) { if(ajaxreq != null) { ajaxreq.abort(); ajaxreq = null; } if(key enter) { needsuggestions = false; execute search; } else { ajaxreq = $.ajax(..., done: function() { ajaxreq = null; } success: function(data) { if(needsuggestions) { display suggestions; } } ); } }
Comments
Post a Comment