2010-08-23 73 views
9

後,我已經建立在一個下拉菜單:jQuery的 - 隱藏一個div菜單點擊外DIV

http://www.ourbridalsongs.com/new_header/header.php

當您單擊向上/向下箭頭旁邊的標誌 - 出現的菜單 - 我想在點擊屏幕上的任何其他位置時使其消失 - 出於某種原因,它會卡住,並且不會滑回。

任何人都可以幫助解決這個問題!

這裏是我的腳本:

$(document).ready(function() { 

    $("ul.subnav").parent().append("<span></span>"); 
    $("ul.topnav li span").click(function() { 
     $(this).parent().find("ul.subnav").slideDown('slow').show(); 
     $(this).parent().click(function() {}, function() { 
      $(this).parent().find("ul.subnav").slideUp('slow'); 
     }); 
    }).hover(function() { 
     $(this).addClass("subhover"); 
    }, function() { 
     $(this).removeClass("subhover"); 
    }); 

}); 

謝謝!

回答

6

在代碼中添加此片段

$(document).click(function(e){ 
    var myTarget = $(".subnav"); 
    var clicked = e.target.className; 
    if($.trim(myTarget) != '') { 
     if($("." + myTarget) != clicked) { 
      $("ul.subnav").slideUp('slow').hide(); 
     } 
    } 
}); 

這將關閉您的ul.subnav當您單擊文檔中的任意位置。

26

這很簡單:將隱藏該菜單的函數綁定到除該菜單外的所有內容。要做到這一點綁定點擊聽衆body元素,因爲它無處不在,也綁定點擊聽衆菜單 - 最後一個應該只是防止執行第一個。

$("body").click(function() { 
    $("#services-container-id").hide(); 
}); 

$("#services-container-id").click(function(e) { 
    e.stopPropagation(); 
}); 
+1

我想你會想這樣做$(「體> *」)。單擊(...讓身體所有的孩子們。 – KeatsKelleher 2010-08-23 01:35:02

+2

我不想讓'body'的孩子。我想獲得'body'本身。 – Crozin 2010-08-23 03:13:00

+0

謝謝,這工作正常!魔術是stopPropagation,它將阻止點擊服務容器到達body.click事件。 – 2010-11-02 17:09:57