I have an input field, where I try to make autocomplete suggestion. Code looks like
<input type="text" id="myinput">
<div id="myresults"></div>
On input’s blur() event I want to hide results’ div:
$("#myinput").live('blur',function(){
$("#myresults").hide();
});
When I write something into my input I send request to server and get json response, parse it into ul->li structure and put this ul to my #myresults div.
When I click to this parsed li element I want to set value from li to input and hide #myresults div
$("#myresults ul li").live('click',function(){
$("#myinput").val($(this).html());
$("#myresults").hide();
});
Everything is going good, but when I click to my li blur() event fires before click() and input’s value don’t get li’s html.
How can I set up click() event before blur()?
Solution 1
Listen to
mousedowninstead ofclick.The
mousedownandblurevents occur one after another when you press the mouse button, butclickonly occurs when you release it.Solution 2
You can
preventDefault()inmousedownto block the dropdown from stealing focus. The slight advantage is that the value will be selected when the mouse button is released, which is how native select components work. JSFiddle