我在前台写了一个input,随后有一个隐藏的ul
<input id="typein" /> <ul id="candlist" style="display:none;list-style:none;"> <li id="kd">kd</li> <li>ld</li> </ul>
然后在jquery里写
1 <script> 2 var typein = $("#typein"); 3 var candlist = $("#candlist"); 4 //输入框变化时ul显示出来 5 typein.keyup(function () { 6 candlist.show(); 7 }); 8 //点击li,将其文本写入input框 9 $("#kd").click(function(){ 10 typein.val($("#kd").text()); 11 }); 12 //input框失去焦点时ul隐藏 13 typein.blur(function(){ 14 candlist.hide(); 15 }); 16 </script>
注释掉blur()方法后,点击kd是可以填充input框的。
现在的问题是blur()发生在click之前,貌似click还没down,blur就已经发生了
请问如何让blur发生在click之后呢?
方法嵌套我试了貌似没什么用
自己写完了,其实这是我是在mvc里做的一个简易版的autocomplete
贴上我的GitHub相关文档:https://github.com/Destiny130/Study-Log/blob/master/2017/Oct/17-10-12.txt
你的思路是有问题的 input失去焦点ul隐藏 那你到哪里输入呢?
应该是input重新获得焦点时ul隐藏 你想一想是不是 input和ul是两个元素 你输入时焦点已经离开了input
呃,ul被隐藏和我的输入有什么关系?再input输入时焦点肯定在input上啊
<script>
var typein = $("#typein");
var candlist = $("#candlist");
//输入框变化时ul显示出来
typein.keyup(function () {
candlist.show();
});
//点击li,将其文本写入input框
$("#kd").click(function(){
typein.val($("#kd").text());
candlist.hide();
});
</script>
理论上,还要再加一个点击其它地方隐藏掉下拉框的功能。
写了啊,blur()函数就是失去焦点时隐藏下拉框的
在触发之前用setTimeout延迟10
http://www.cnblogs.com/liao1992/articles/7651060.html
或者你可以看看我这篇 虽然有点简陋 但是是我零时写的 改改还是能用的