257

如果输入字段获得焦点,我试图显示一个容器,并且 - 这是实际问题 - 如果焦点丢失,则隐藏容器。jQuery 的焦点是否有相反的事件?

一些示例代码:

<input type="text" value="" name="filter" id="filter"/>

<div id="options">some cool options</div>

<script type="text/javascript">
  $('#options').hide();

  $('#filter').focus(function() {
    $('#options').appear();
  });
</script>

我想做的是这样的:

$('#filter').focus_lost(function() {
  $('#options').hide();
});
4

5 回答 5

428

当元素失去焦点时,使用blur事件调用您的函数:

$('#filter').blur(function() {
  $('#options').hide();
});
于 2009-09-14T19:54:50.260 回答
43

像这样:

$(selector).focusout(function () {
    //Your Code
});
于 2011-01-27T17:50:46.967 回答
33

使用“模糊”: http ://docs.jquery.com/Events/blur#fn

于 2009-09-14T19:56:06.780 回答
13

blur 事件:当元素失去焦点时。

focusout 事件:当元素或其中的任何元素失去焦点时。

由于滤镜元素内部没有任何东西,因此在这种情况下,模糊和聚焦都将起作用。

$(function() {
  $('#filter').blur(function() {
    $('#options').hide();
  });
})

jsfiddle 模糊:http: //jsfiddle.net/yznhb8pc/

$(function() {
  $('#filter').focusout(function() {
    $('#options').hide();
  });
})

带焦点的 jsfiddle:http: //jsfiddle.net/yznhb8pc/1/

于 2015-01-30T01:04:40.700 回答
0

如果在聚焦字段之前从视图中隐藏了“酷选项”,那么您可能希望在 JQuery 中创建它而不是在 DOM 中创建它,这样任何使用屏幕阅读器的人都不会看到不必要的信息。当我们不必看的时候,他们为什么要听呢?

所以你可以像这样设置变量:

var $coolOptions= $("<div id='options'></div>").text("Some cool options");

然后在焦点上附加(或前置)

$("input[name='input_name']").focus(function() {
    $(this).append($coolOptions);
});

然后在焦点结束时移除

$("input[name='input_name']").focusout(function() {
    $('#options').remove();
});
于 2016-07-27T08:03:57.270 回答