我创建了一个简单的导航栏,当您单击某个项目时,该项目下会打开另一个。消失我写的打开:

$("#container:not(#navbar)").click(function(){
 $("#mini_navbar_home").hide()
});


我想说“有人在屏幕上的任何地方(导航栏除外),都消失了#mini_navbar_home”,但是在容器上的任何地方单击都会隐藏该信息

如果有帮助,它是脚本的一部分:

 var navs = new Array("#mini_navbar_home","#mini_navbar_aboutus","#mini_navbar_folan");
 var colors = new Array("#home_t","#aboutus_t","#folan_t");

 $(document).ready(function(){
  $("#home_t").click(function(){
   change_bg("#home_t")
   navbar_slide_toggle("#mini_navbar_home")
  });
        .
        .
        .
  $("#container:not(#navbar)").click(function(){
   hide_all()
   change_bg()
  });
 });

 function change_bg(div){
  for(i=0; i<colors.length; i++){
   if (colors[i] != div){
    $(colors[i]).css("backgroundColor", "#8895B7");
   }
  }

  if ($(div).css("backgroundColor") == "rgb(169, 181, 212)"){
   $(div).css("backgroundColor", "#8895B7")
  }
  else {
   $(div).css("backgroundColor", "#A9B5D4")
  }
 }
 function navbar_slide_toggle(div){
  for(i=0; i<navs.length; i++){
   if (navs[i] != div){
    $(navs[i]).hide();
   }
  }
  $(div).slideToggle(0);

 }
 function hide_all(){
  for(i=0; i<navs.length; i++){
   $(navs[i]).hide()
  }
 }


顺便说一下,#navabr与#container嵌套
我想我的解决方案对大多数用户来说都是愚蠢的:D

最佳答案

我认为您是说要单击不在#mini_navbar_home内部的#container时隐藏#navbar。这很简单:

$('#container').click(function(e){
    var $navbar = $('#navbar');
    if (($navbar[0] !== e.target) && // if the click wasn't on navbar itself
        !$navbar.has(e.target).length // and it wasn't inside navbar
       ) {
        $("#mini_navbar_home").hide() // hide it
    }
});


stopPropagation相比,它的优势在于,您可以在#navbar中的元素上继续使用事件冒泡。 stopPropagation会中断,例如$('a').live(...)调用。

关于javascript - :not不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4845839/

10-11 05:54