2013-02-09 37 views
1

我隐藏与.toggle()如何在点击页面上的任何位置时隐藏切换div?

<div style="position: absolute; top: 0; right: 250px;z-index:7"> 
    <div class="Search" style="display: none;" > 
    <table width="100%" style="border: 1px solid #fff; border-radius:5px;padding:15px"> 
     <tr> 
     <td> 
     <asp:DropDownList ID="CategoryDropDownList" runat="server" /> 
     </td> 
     </tr> 
     </table> 
    </div> 
    <div id="showSreachDiv"> 
    <a style="cursor: pointer"> 
    <img src="images/btnSearch.png" /></a> 
    </div> 
</div> 

/显示元素与jQuery

$(document).ready(function() { 
     $("#showSreachDiv").click(function() { $(".Search").toggle("slow"); }); 
    }); 

当我点击我的DIV,显示切换股利。

但我想要的,当点击页面上的任何位置时隐藏切换div。

我使用此代码

$(function() { 

     // body click 
     $("body").click(function() { 

      // element to toggle 
      var $el = $(".Search"); 

      // toggle div 
      if ($el.is(":visible")) { 
       // fade out 
       $el.fadeOut(200); 
      } else { 
       // fade in 
       $el.fadeIn(200); 
      } 

     }); 
    }); 

但它显示和隐藏的toogle DIV当我点击我的股利。

+0

但不透明页面之间的DIV叠加事件传播,然后听它的点击 - 这将是简单的。 – moonwave99 2013-02-09 10:13:57

+0

切换document.click事件中的DIV,单击DIV本身时它会被触发。 – Niloo 2013-02-09 10:15:11

+0

要真正理解发生了什么,您应该阅读一般事件委派。这里有一个来自Jquery的链接:http://learn.jquery.com/events/event-delegation/ – 2015-09-11 05:03:17

回答

2

您必须停止事件冒泡到文档e.stopPropagation()

chekout fiddle

$(document).ready(function() { 
    $("#showSreachDiv").click(function (e) { //<--------pass here 
     e.stopPropagation(); // <--------------stop here 
     $(".Search").toggle("slow"); 
    }); 
    $(document).click(function() { // you don't need the else part to fadeout 
     var $el = $(".Search"); 
     if ($el.is(":visible")) { 
      $el.fadeOut(200); 
     } 
    }); 
}); 
+0

非常感谢:) – Niloo 2013-02-11 04:48:09

+0

不客气,祝你好运。 – Jai 2013-02-11 04:49:50

+0

非常感谢:)好运。 – Niloo 2013-02-11 05:04:22

0

作为一个修补程序,检查目标元素是不是你要隐藏的元素:

$("body").click(function (event) { 

    // element to toggle 
    var $el = $(".Search"); 

    if(event.target == $el[0]) 
     return; 

    ... 

}); 
+0

谢谢,但不显示切换div。 – Niloo 2013-02-09 10:28:44

0

试试这个。你需要停下一次点击“showSr​​eachDiv”

$(document).ready(function() { 
    $('#showSreachDiv').click(function(evt) { 
     $(".Search").toggle("slow"); 
     evt.stopPropagation(); 
    }); 

    $(document).click(function(){ 
     $(".Search").toggle("slow"); 
    }); 
}); 
+0

非常感谢..但是,当点击页面上的任何位置时,我想“隐藏”切换div。 – Niloo 2013-02-11 04:49:25

+0

这不是一个解决方案,它击败了尝试在单击文档时切换'out'的目的,因为当文档在任何地方被点击时它还切换'in'。你可能想更新你的答案。 – 2015-08-24 20:23:10

相关问题