【发布时间】:2019-05-10 13:17:46
【问题描述】:
我有一个包含自定义下拉菜单的输入。当您单击菜单项时,它应该将输入的值设置为项的文本。我还希望在输入失去焦点时隐藏菜单。这产生了一个问题,单击菜单项会使输入失去焦点并在菜单项的单击事件可以运行之前隐藏菜单。我该如何解决这个问题?
$(document).on('click', '#inputMenu li', function (e) {
$('#input').val($(this).text());
$('#inputMenu').removeClass('active');
e.preventDefault();
return false
});
$('#input').on('focusout',function(e) {
$('#inputMenu').removeClass('active');
});
$('#input').on('input',function(e) {
$('#inputMenu').addClass('active');
});
#inputMenu {
display: none;
}
#inputMenu.active {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="input" type="text" placeholder="type something">
<ul id="inputMenu">
<li>Click me to set text 1</li>
<li>Click me to set text 2</li>
<li>Click me to set text 3</li>
<li>Click me to set text 4</li>
</ul>
【问题讨论】:
-
你能添加一点 HTML 并将你的代码转换为可运行的 sn-p 吗?
-
已添加片段。
-
既然你已经有了很好的答案,我就不再添加了。只是一个简短的说明:对我作为用户来说,使用
focus和blur会比input和focusout更直观
标签: jquery