单击搜索图标后,我想在搜索表单中淡出并添加焦点。如果在打开表单的同时单击了除表单以外的页面上的其他任何位置,我想使表单淡出。这是我的代码。当前,即使单击该表单,该表单也会隐藏:
<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' );
}
});
答案 0 :(得分:1)
您已将事件侦听器放在不是.navbar内的表单的所有正文元素上。在表单内部单击仍会冒泡到身体。取而代之的是,侦听对主体的单击,然后检查单击是否在表单内:
$("body").on( 'click', function(e) {
if( !$(e.target).closest('form.form-inline').length && archForm.hasClass('visible') ) {
searchForm.toggleClass( 'visible' );
}
});
您还可以在表单下方但在身体的其余部分使用全屏固定元素,并听其点击。