2

我有一个搜索框,可以选择用户并将他们发送到我页面上的一个 div 中,该页面显然会随脚本一起打开。但是,如果用户在我的网站页面上的任何位置单击 div 之外,我希望该框关闭。我已经尝试了一些想法,但没有得到我想要的东西。

HTML

<input type="text" id="search_txt" placeholder="Search for friends" class="blog_input_field" onKeyUp="dosearch(document.getElementById('search_txt').value,'ajaxsearch_results');"><hr>
<div class="searchresults" id="ajaxsearch_results">

请求功能

function dosearch(text,containerid){
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();

    } else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {
            //alert(xmlhttp.responseText);
            document.getElementById(containerid).innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","include/search.people.php?t="+text,true);
    xmlhttp.send();

}
4

2 回答 2

8

在 jquery 中你可以这样做:

$(document).click(function(){
   $('.searchresults').hide();   
});

$('.searchresults').click(function(e){
    e.stopPropagation();
});

​</p>

于 2012-08-24T22:20:47.200 回答
4

这可以用原始 JS 完成,不需要 Jquery。您将 onmousedown 或 on click 挂钩,并利用 JS 事件冒泡的事实,最终(除非被阻止)到文档。所以:

document.onmousedown (or onclick) = function (e) {

  if (!e) e = window.event; // for browser compatibility

  target = (e.target ) ? e.target : e.srcElement; // again for browser compat..

  // note - could be child of div, too: see fine print    
  if (e.target.id != "divIDgoesHere")
      document.getElementById('divIDgoesHere').style.display = "none" ;
      // or other hide
}

精美的印刷品:

  • 如果您在 div 内部单击,则目标可能是 div 的某个内部子级。在这种情况下,您可以遍历 parentNode 直到到达搜索 div,然后忽略这些请求。

  • 您也可以完全删除 div (div.parentNode.removeChild(div))。

  • 您需要对代码进行一些调整。没什么大不了的。

希望这可以帮助

TG

于 2012-08-24T22:18:48.220 回答