如何解决在IE中input获得焦点后,拖动其他div的滚动条不触发input的失去焦点事件?
问题描述:
在谷歌,或者火狐浏览器中当输入框获得焦点,拖动其他div的输入框不会触发input的失去焦点事件,但是在IE中会触发,请问如何解决?
想要的效果是当我输入框获得焦点展示div时,拖动div的滚动条不要触发失去焦点事件,div仍能展示而不是被隐藏。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
list-style: none;
}
#divshow {
display: none;
width: 200px;
height: 100px;
overflow: hidden;
overflow-y: auto;
}
#divinner {
width: 200px;
height: 400px;
background-color: blueviolet;
}
.scrolls {
height: 3000px;
width: 500px;
float: left;
}
#box {
width: 600px;
overflow: hidden;
overflow-y: auto;
height: 500px;
}
</style>
</head>
<body>
<div id="box">
<div class="scrolls">
<input type="text" name="boxa" id="boxa" value="" />
<div class="div1" id="divshow">
<div id="divinner">
这是里面的内容
</div>
</div>
</div>
</div>
</body>
</html>
<script type="text/javascript">
var xx = document.all
console.log(xx);
var inp = document.getElementById("boxa");
inp.onfocus = function() {
document.getElementById("divshow").style.display = "block";
}
inp.onblur = function() {
console.log("失去焦点");
document.getElementById("divshow").style.display = "none";
}
</script>
答
<br> * {<br> margin: 0;<br> padding: 0;<br> list-style: none;<br> }<br> #divshow {<br> display: none;<br> width: 200px;<br> height: 100px;<br> overflow: hidden;<br> overflow-y: auto;<br> }<br> #divinner {<br> width: 200px;<br> height: 400px;<br> background-color: blueviolet;<br> }<br>
这是里面的内容
var flag = 0; var inp = document.getElementById("boxa"); inp.onclick = function(ev) { var ev = ev || window.event; if(ev.stopPropagation) { //W3C阻止冒泡方法 ev.stopPropagation(); } else { ev.cancelBubble = true; //IE阻止冒泡方法 } }; inp.onfocus = function(ev) { flag = 1; console.log("inputfocus", flag); document.getElementById("divshow").style.display = "block"; }; inp.onblur = function() { flag = 0; console.log("失去焦点", flag); }; document.getElementById("divshow").onclick = function(ev) { var ev = ev || window.event; console.log(ev); console.log(ev.currentTarget); console.log(ev.srcElement); var clickElement=null; if (ev.currentTarget) { clickElement=ev.currentTarget; }else{ clickElement=ev.srcElement; } console.log(this); if (clickElement === this) { // flag = 1; // console.log("div", flag); flag = 0; console.log("div", flag); } if(ev.stopPropagation) { //W3C阻止冒泡方法 ev.stopPropagation(); } else { ev.cancelBubble = true; //IE阻止冒泡方法 } }; window.onclick = function() { console.log("click", flag); if (flag != 1) { document.getElementById("divshow").style.display = "none"; } flag = 0; };
<!DOCTYPE html>
<br> * {<br> margin: 0;<br> padding: 0;<br> list-style: none;<br> }<br> #divshow {<br> display: none;<br> width: 200px;<br> height: 100px;<br> overflow: hidden;<br> overflow-y: auto;<br> }<br> #divinner {<br> width: 200px;<br> height: 400px;<br> background-color: blueviolet;<br> }<br>
这是里面的内容
var flag = 0; var inp = document.getElementById("boxa"); inp.onclick = function(ev) { var ev = ev || window.event; if(ev.stopPropagation) { //W3C阻止冒泡方法 ev.stopPropagation(); } else { ev.cancelBubble = true; //IE阻止冒泡方法 } }; inp.onfocus = function(ev) { flag = 1; console.log("inputfocus", flag); document.getElementById("divshow").style.display = "block"; }; inp.onblur = function() { flag = 0; console.log("失去焦点", flag); }; document.getElementById("divshow").onclick = function(ev) { var ev = ev || window.event; console.log(ev); console.log(ev.currentTarget); console.log(ev.srcElement); var clickElement=null; if (ev.currentTarget) { clickElement=ev.currentTarget; }else{ clickElement=ev.srcElement; } console.log(this); if (clickElement === this) { // flag = 1; // console.log("div", flag); flag = 0; console.log("div", flag); } if(ev.stopPropagation) { //W3C阻止冒泡方法 ev.stopPropagation(); } else { ev.cancelBubble = true; //IE阻止冒泡方法 } }; window.onclick = function() { console.log("click", flag); if (flag != 1) { document.getElementById("divshow").style.display = "none"; } flag = 0; };
答
这个你就需要用 浏览器 f12 去自己调试了
答
js有时候就是要针对不同的情况进行兼容. 你再对document 添加点击事件, 当其他地方点击了, 除了input, 然后让input 失去焦点就行了.