javascript - jQuery 单击外部关闭过滤器

标签 javascript jquery html

我有一个侧面过滤器,用户可以在其中填写一些信息并过滤网页。

我希望此菜单在单击按钮时出现,在单击按钮外部时消失。这是我目前必须让过滤器在用户点击外部时消失的方法:

$(window).click(function(e) {
    if ((!$(e.target).hasClass("filterOverlay")) && (!$(e.target).hasClass("toggleFilterButton"))) {

        $('.filterOverlay').hide();
        $('.darkBackground').hide();
    }
});

这行得通。但是,仅当过滤器为空时。因为有趣的是,当我添加一个输入字段并单击它时。当然 Jquery 不会将其识别为 Filter 并关闭它。

处理这样的事情最好的方法是什么?我找到的只是上面的解决方案,但正如所指出的,这并不适合。

最佳答案

使用 jQuery blur()在输入框外单击时的方法。

The blur event occurs when an element loses focus.

CSS

.filter-div {
    display: none;
}

HTML

<button type="button" class="btn btn-primary" id="toggleFilter">Filter</button>

<div class="filter-div">
  <input type="text" class="form-control" id="filter" placeholder="Filter">
</div>

JS

$('#toggleFilter').on('click', function() {
    $('.filter-div').slideToggle();
    if ($('.filter-div').css('display') != 'none') {
        $('#filter').focus();
    }
});

$('#filter').on('blur', function() {
    $('.filter-div').slideToggle();
});

检查一下: JsFiddle

关于javascript - jQuery 单击外部关闭过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39660729/

相关文章:

javascript - Phaser-如何制作无限大地?

javascript - 如何从 JavaScript 中的字符串中删除 div 和 span 以外的 HTML 标记?

javascript - 使用 jquery 创建带有 div 的框

php - 如何使用 Laravel + Jquery Ajax 从文本区域获取值到文本区域?

javascript - Ajax 成功数据返回完整的 HTML 页面

javascript - Internet Explorer HTML 标记未立即更新

javascript - 使用扩展程序显示带有地址栏的 chrome 弹出窗口

javascript - 文件被分配了一个//# sourceMappingURL 但已经有一个

javascript - 如何防止tab键跳转到下一个表单域?

javascript - 使用键值遍历javascript多维数组