jQuery:在blur()事件之前触发click()

Ego*_*ich 129 jquery click onblur

我有一个输入字段,我尝试制作自动填充建议.代码看起来像

<input type="text" id="myinput">
<div id="myresults"></div>
Run Code Online (Sandbox Code Playgroud)

在输入blur()事件中我想隐藏结果'div:

$("#myinput").live('blur',function(){
     $("#myresults").hide();
});
Run Code Online (Sandbox Code Playgroud)

当我在输入中写入内容时,我向服务器发送请求并获取json响应,将其解析为ul-> li结构并将此ul放到我的#myresultsdiv中.

当我点击这个解析的li元素时,我想将值从li设置为input并隐藏#myresultsdiv

$("#myresults ul li").live('click',function(){
     $("#myinput").val($(this).html());
     $("#myresults").hide();
});
Run Code Online (Sandbox Code Playgroud)

一切都很顺利,但是当我点击我的li blur()事件之前触发click()并且输入的值不会得到li的html.

我怎么能click()在之前设置活动blur()

Ale*_*dev 295

解决方案1

mousedown而不是click.

mousedownblur当您按下鼠标按钮事件接二连三发生,但click只有当你释放它发生.

解决方案2

您可以preventDefault()mousedown以阻止偷焦点下拉.轻微的优点是,当释放鼠标按钮时将选择该值,这是本机选择组件的工作方式.的jsfiddle

$('input').on('focus', function() {
    $('ul').show();
}).on('blur', function() {
    $('ul').hide();
});

$('ul').on('mousedown', function(event) {
    event.preventDefault();
}).on('click', 'li', function() {
    $('input').val(this.textContent).blur();
});
Run Code Online (Sandbox Code Playgroud)

  • 解决方案1在同样的情况下为我工作!轻松改变!谢谢 :) (11认同)
  • 解决方案#2非常巧妙.我原本不会想到的!谢谢 (4认同)
  • @MudassirAli因为mousedown事件在模糊之前出现,然后点击之后.http://jsfiddle.net/f3BKP/ (3认同)