我创建了一个简单的导航栏,当您单击某个项目时,该项目下会打开另一个。消失我写的打开:
$("#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/