需求:
1.点击激活时展示下拉列表
2.点击下拉列表不关闭
3.点击其他区域下拉列表关闭
实现方案:
- 需求一:这里我用的时onclick 也可以用onfocus事件,但是后面就得考虑onclick
和onfocus执行先后顺序onblur失去焦点关闭
<input type="text" class="artListInput" onclick="showArtList()" onblur="$('.artLists').hide()">
- 需求二:点击下拉列表不关闭,这里困难点就是点击列表和 input的onblur冲突,两个事件执行,因此解决:
onmousedown="$('.artLists').show();"
onmousedown会优先onblur事件,如果需求没有强制要求不关闭,artLists下拉列表中的click事件会不执行
优先级顺序:onmousedown>onblur>onclick
- 需求三点击其他区域关闭下拉
思路:在特定条件下 input 失去焦点关闭弹窗,因为onmousedown会先执行,因此需要在mousedown中添加判断,在onmousedown期间不能关闭,等200ms重置条件
onmousedown="$('.artLists').show();isClose=true;setTimeout(function(){isClose=false},200)"
<input type="text" class="artListInput" onclick="showArtList()" onblur="if(!isClose)$('.artLists').hide()">
完整代码:
<input type="text" class="artListInput" onclick="showArtList()" onblur="if(!isClose)$('.artLists').hide()">
<div class="artLists" onclick="$('.artListInput').focus();" onmousedown="$('.artLists').show(); isClose=true;setTimeout(function(){isClose=false},200)"></div>