这个问题出现的地方非常多,例如点击弹出下拉菜单中,弹框等。
css部分
#myDiv{
border:1px solid #000000;
width:200px;
height:100px;
background:#FF0000;
color: #FFFFFF;
margin: 50px auto;
html部分
<div id="myDiv">隐藏的层</div>
js部分
window.onload=function(){
var myDiv = document.getElementById("myDiv");
document.addEventListener("click",function(){
myDiv.style.display="none";
});
myDiv.addEventListener("click",function(event){
event=event||window.event;
event.stopPropagation();
});
};
以上部分是js原生写法:
那么jQuery的写法怎么写:
<div class="btn" id="btn">btn</div>
<div class="box"></div>
方法一:
$(".btn").on('click',function(e){
$('.box').show();
e.stopPropagation();
}
$("body").on('click',function(){
$('.box').hide();
}
方法二:
$('body').click(function(e) {
var target = $(e.target);
// 如果#overlay或者#btn下面还有子元素,可使用
// !target.is('#btn *')
if(target.is('#btn')){
$('.box').show();
}else{
$('.box').hide();
}
});
方法三:
//判断:当前元素是否是被筛选元素的子元素
// jQuery.fn.isChildOf = function(b){ return (this.parents(b).length > 0); };
//判断:当前元素是否是被筛选元素的子元素或者本身
jQuery.fn.isChildAndSelfOf = function(b){ return (this.closest(b).length > 0); };
$(document).click(function(event){
if(!$(event.target).isChildAndSelfOf('#btn')){
$('.box').hide();
}
});
$('#btn').on('click',function(){
$('.box').show();
})