如果在可见表单旁边单击页面上的其他任何位置,则关闭搜索表单

时间:2018-11-02 01:31:25

标签: javascript jquery

单击搜索图标后,我想在搜索表单中淡出并添加焦点。如果在打开表单的同时单击了除表单以外的页面上的其他任何位置,我想使表单淡出。这是我的代码。当前,即使单击该表单,该表单也会隐藏:

<form class="form-inline align-middle d-none d-md-inline-block" action="/" role="search">
    <input class="form-control" type="text" name="s" placeholder="type and tap enter" aria-label="search" value="<?php echo get_search_query(); ?>">
</form>

var searchForm = $( '.navbar form' );

// Navbar Search Toggle, hide nav menu if open
$( '.search-icon-container' ).click(function(e) {
    e.stopPropagation();
    searchForm.toggleClass( 'visible' );
    $( '.navbar form input' ).focus();
    $( '.navbar-collapse' ).removeClass( 'show' );
});

// Close search bar if anywhere else in the document is clicked other than the form
$("body:not('.navbar form')").on( 'click', function() {
    if( searchForm.hasClass( 'visible' ) ) {
        searchForm.toggleClass( 'visible' );
    }
});

1 个答案:

答案 0 :(得分:1)

您已将事件侦听器放在不是.navbar内的表单的所有正文元素上。在表单内部单击仍会冒泡到身体。取而代之的是,侦听对主体的单击,然后检查单击是否在表单内:

$("body").on( 'click', function(e) {
        if( !$(e.target).closest('form.form-inline').length && archForm.hasClass('visible') ) {
            searchForm.toggleClass( 'visible' );
        }
    });

您还可以在表单下方但在身体的其余部分使用全屏固定元素,并听其点击。