2013-02-09 70 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