- 一开始的思路
- 当input框获取焦点时div浮出
- 当input框失去焦点时div隐藏
- 当点击里面div块里的一个div块时,字div块的内容会显示到input框
- 方法
- onfocus()
- onblur()
- onclick()
然而这样想法很正常但却出现了很多问题,其中最大的就是onclick与onblur处理冲突问题,因为在触发onclick时onblur也可以出发,js的单线程限制了只允许一个事件触发,onblur的优先性高于onclick,所以会先触发onblur即就是隐藏了浮动框。
后来对程序进行了改进
- 新的思路
- 事件触发全部换为onclick
- 当触发完input框的点击事件后,不管点哪里div都隐藏,即就是触发document.onclick事件
简单介绍一下这个方法:就是触发这个元素的事件后,还会在dom树上找它的父节点,直到根结点一直执行这个事件。
代码如下:
var test = document.getElementById('test');
var oDiv = document.getElementById('oDiv');
test.onclick = function(event){
oDiv.style.display = 'block';
event.stopPropagation();
document.onclick = function(){
oDiv.style.display = 'none';
alert(1);
}
}
oDiv.onclick = function(){
test.value = oDiv.innerHTML;
}