js获取焦点所在的空间

qq_22672291 2017-08-02 11:21:40
今天写一个输入框input,在输入框input获得焦点是显示一个下拉框select,而当这个输入框失去焦点时,隐藏这个下拉框,不过有个例外,就是焦点在下拉框上面,就不隐藏。所以我在input失去焦点是(点击的下拉框),判断获得焦点的是不是下拉框,如果是,就不隐藏,不是的话就隐藏。

onBlur(){
var act = document.activeElement.nodeName;
console.log(act)

// this.hour.style.display='none'
// this.min.style.display='none'
}


然而在我点击下拉框是,按理说input输入框失去焦点是,获得焦点的是下拉框,可是控制台打印的却是body???
什么情况??
...全文
244 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2017-08-04
  • 打赏
  • 举报
回复


<input list="list" />
<datalist id="list">
    <option>test1</option>
    <option>2dawd</option>
    <option>jrtdf</option>
</datalist>
qq_22672291 2017-08-04
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
ie浏览器没问题,Chrome9浏览器有一个焦点从body向下传递的过得。你可以延迟一下再获取activeElement

<input type="text" onblur="onBlur()" />
<select name="test">
	<option value="" selected="selected">1</option>
	<option value="">2</option>
</select>
<script type="text/javascript">
	function onBlur(){
		setTimeout(function(){
	        var act = document.activeElement.nodeName;
	        alert(act);
		}, 100);
    }
</script>
感觉不是很好,延迟一毫秒,对性能会产生影响吧!不过还是谢谢你!
天际的海浪 2017-08-02
  • 打赏
  • 举报
回复
ie浏览器没问题,Chrome9浏览器有一个焦点从body向下传递的过得。你可以延迟一下再获取activeElement

<input type="text" onblur="onBlur()" />
<select name="test">
	<option value="" selected="selected">1</option>
	<option value="">2</option>
</select>
<script type="text/javascript">
	function onBlur(){
		setTimeout(function(){
	        var act = document.activeElement.nodeName;
	        alert(act);
		}, 100);
    }
</script>

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧