所以我正在创建一个小搜索栏,在其下面显示结果:
<div id='searchWrapper'>
<div id='Search'>
<input id="inputSpn" type="input" value="" />
<input id="searchBtn" type="image" src="/search.png" />
<br clear='all'/>
</div>
<div id='Results'>
</div>
</div>
我基本上是通过AJAX进行livesearch。 <div id='Results'>
最初是隐藏的,直到您输入并填充一些结果。然而,我的问题是当用户点击时将其隐藏起来。让它通过onblur
消失不起作用,因为我需要能够点击结果,而不是让它们消失在我身上。不幸的是,我还没能在互联网上找到一个好的非jQuery方法。最简单的方法是:如果点击<div id='searchWrapper'>
以外的任何内容,我希望结果消失。谢谢!
答案 0 :(得分:0)
为文档添加侦听器(使用addEventListener) - JSFiddle Example
<style>
#Results {
display: none;
}
</style>
<script type="text/javascript">
window.onload = function(){
document.addEventListener('click', function(event){
if(document.getElementById('searchBtn') != (event.target) ? event.target : event.srcElement) {
document.getElementById('Results').style.display = 'none';
} else {
document.getElementById('Results').style.display = 'block';
}
});
};
</script>
<div id='searchWrapper'>
<div id='Search'>
<input id="inputSpn" type="input" value="" />
<input id="searchBtn" type="button" value="Search"/>
<br clear='all'/>
</div>
<div id='Results'></div>
</div>
但是,如果您要在自己的网站中使用大量的Javascript,可以考虑使用jQuery - 它会让您的生活更轻松。
答案 1 :(得分:0)
这是一个非优化但有效的非jQuery解决方案
<script>
document.onclick=function(e) {
var elem = e?e.target:event.srcElement;
var id = elem.id;
document.getElementById("inputSpn").value=id+" clicked"; // debug - remove when happy
// the following could be done by looping over the searchWrapper and its children
if (id !="searchWrapper" && id!="Search" && id != "inputSpn" && id != "searchBtn" && id != "Results") {
document.getElementById("Results").style.display="none"
}
}
</script>
<div id='searchWrapper'>
<div id='Search'>
<input id="inputSpn" type="input" value="" />
<input id="searchBtn" type="image" src="TekTP/icons/search.png" />
<br clear='all'/>
</div>
<div id='Results'>hello
</div>
</div>
更新:
如果点击包装器div
,则切换 var hide= (id !="searchWrapper" && id!="Search" && id != "inputSpn" && id != "searchBtn" && id != "Results");
document.getElementById("Results").style.display=(hide)?"none":"block";