【问题标题】:Javascript onfocus / onblur issuesJavascript onfocus / onblur 问题
【发布时间】:2011-06-08 07:14:16
【问题描述】:

所以我正在制作一个小搜索栏,在其下方显示结果,如下所示:

<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 进行实时搜索。 &lt;div id='Results'&gt; 最初是隐藏的,直到您键入它并填充一些结果。然而,我的问题是当用户点击离开时让它隐藏起来。让它通过onblur 消失也不起作用,因为我需要能够点击结果而不是让它们消失在我身上。不幸的是,我还没有在互联网上找到一个好的非 jQuery 方法。最简单的说法是:如果点击了 &lt;div id='searchWrapper'&gt; 之外的任何内容,我希望结果消失。谢谢!

【问题讨论】:

标签: javascript onblur livesearch


【解决方案1】:

这是一个未优化但有效的非 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";

【讨论】:

  • 不客气 :) PS:我认为
    应该在结果 div 之前的 div 之外
【解决方案2】:

向文档添加监听器(使用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 - 它会让您的生活更轻松。

【讨论】:

  • 非 IE 解决方案,如果单击搜索按钮以外的任何内容,它将隐藏
  • 从未声称它是 IE 解决方案。如果提问者想要跨浏览器运行良好的 JS,那么提问者应该考虑使用库。
  • 或者只是为 event.target/event.srcElement 添加了三元测试
  • @mplungjan,不错的建议,已添加 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多