首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .focusout / .click冲突

jQuery .focusout / .click冲突
EN

Stack Overflow用户
提问于 2012-12-20 21:06:10
回答 3查看 24.7K关注 0票数 34

我正在用一个自动完成的搜索框做一个项目。现在,我有一个问题,我想将从找到的自动完成结果的值传递到输入框,但同时,当输入字段没有更集中时,我希望自动完成框隐藏。

现在,我和它们都有了冲突,因为单击自动完成框被看作是焦点,甚至在它能够传递值之前就隐藏了这个框。对于这种问题,有什么建议或解决办法吗?这是一个让你更清楚的小把戏。

http://jsfiddle.net/KeGvM/

或者在这里

CSS

代码语言:javascript
复制
#a_c {display:none;}​

JS

代码语言:javascript
复制
$('#search_field').focusout(function() {
    $('#a_c').hide(); // IF I DELETE THIS IT WORKS
});

$('#search_field').focusin(function() {
    $('#a_c').show();
});

$('#a_c a').click(function() {
    $('#search_field').val('');
    var value = $(this).text();
    var input = $('#search_field');
    input.val(input.val() + value);
    $('#a_c').hide();
    return false;
});​

代码语言:javascript
复制
<input autocomplete="off" onkeyup="searchFor(this.value);" name="search" id="search_field" class="bold" type="text" placeholder="Search...">
<div id="a_c"><a href="">hello world</a></div>​
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-20 21:09:39

在类似情况下,我的解决方案是使用超时值暂时阻止在blur事件处理程序中采取的操作。如下所示:

代码语言:javascript
复制
$('#search_field').focusout(function() {
    window.setTimeout(function() { $('#a_c').hide() }, 100);
});
票数 32
EN

Stack Overflow用户

发布于 2017-12-22 16:50:50

我解决这个问题的方法是使用mousedown事件而不是clickmousedown事件是总是在focusout事件之前触发的,而click不是。

你可以在下面的演示中试一试。集中在字段上,然后单击按钮。

代码语言:javascript
复制
const field = document.getElementById('field');
const btn = document.getElementById('btn');

btn.addEventListener('click', () => console.log('Click'));
btn.addEventListener('mousedown', () => console.log('Mouse down'));
field.addEventListener('focusout', () => console.log('Focus out'));
代码语言:javascript
复制
<input id="field">
<button id="btn">Try it</button>

如您所见,输出的顺序如下:

  1. 鼠标倒下
  2. 集中精力
  3. 点击

这是最稳定的解决方案,没有使用任何解决方案,如超时。它也不依赖于jQuery。唯一值得注意的是,mousedown并不是等待用户发布鼠标按钮,而是在用户体验方面,这并不是真正值得关注的问题。

票数 39
EN

Stack Overflow用户

发布于 2014-11-21 03:03:39

不如用

*悬停

我用它解决了同样的问题。

代码语言:javascript
复制
$('className').on('focusout', function(e) {
    if($('.suggestLi' + ':hover').length) {
        return;
    }
    $('.suggestList').empty();
});
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13980448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档