【问题标题】:jquery click triggered by underlaying div由底层div触发的jquery点击
【发布时间】:2015-03-10 08:38:00
【问题描述】:

我正在制作自己的灯箱。

我有一个半透明的 div,它固定在整个屏幕上,在里面我的灯箱以我的内容为中心。一个div中的一个div。

我对 jQ 不是很好,所以我不知道如何确保单击事件(关闭带有暗色 div 和灯箱的容器)仅在单击暗色区域时触发,而不是在我单击某些内容时触发灯箱。

本质上:如果单击半透明区域,则关闭弹出和半透明区域,但如果我单击中间灯箱则不会。

这是我目前得到的: (灯箱居中,如https://stackoverflow.com/a/8620628/891052

$(document).ready( function() {
  $("#openpopup").click(function() {
	$('#closepopup').toggle();
  });
  $("#closepopup").click(function() {
	$('#closepopup').toggle();
  });
});
html, body {height:100%;}
#closepopup {
	background:rgba(0,0,0,.5);
	position:fixed;
	top:0;
	left:0;
	
	THIS_CENTERS_CONTENT:;
	width:100%;
	height:100%;
	vertical-align: middle;
	text-align:center;
}
.fullheight { 
	THIS_CENTERS_CONTENT:;
	height:100%;
	vertical-align: middle;
	display: inline-block;
}

#popupbox {
	background:#ebebeb;
	border-radius:15px;
	text-align:left;
	height:auto;
	
	THIS_CENTERS_CONTENT:;
	max-width:90%;
	vertical-align: middle;
	display: inline-block;
}
#popupboxinner {
	THIS_KEEPS_CONTENT_PLACED:;
	max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
	padding:20px 30px;
	min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
	<span class="fullheight"></span>
	<div id="popupbox">
		<div id="popupboxinner">
			LIGHTBOX CONTENT - SHOULD NOT CLOSE IF CLICKED
		</div>
	</div>
</div>
<span id="openpopup">OPEN CLICKABLE SEMI TRANSPARENT WRAPPER WITH LIGHTBOX INSIDE</span>

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/9237516/… 但这有你的答案:在透明 div 上放置一个点击处理程序 :)
  • 我就是这么做的。我在半透明 div 上放置了一个点击处理程序,但是当我点击其中的灯箱区域 div 时,它也会被触发,这是我不想要的。

标签: jquery click


【解决方案1】:

$(document).ready( function() {
  $("#openpopup").click(function() {
	$('#closepopup').toggle();
  });
  $("#closepopup").click(function() {
	$('#closepopup').toggle();
  });
  $('#popupbox').click(function(e){
     e.stopPropagation();
  });
});
html, body {height:100%;}
#closepopup {
	background:rgba(0,0,0,.5);
	position:fixed;
	top:0;
	left:0;
	
	THIS_CENTERS_CONTENT:;
	width:100%;
	height:100%;
	vertical-align: middle;
	text-align:center;
}
.fullheight { 
	THIS_CENTERS_CONTENT:;
	height:100%;
	vertical-align: middle;
	display: inline-block;
}

#popupbox {
	background:#ebebeb;
	border-radius:15px;
	text-align:left;
	height:auto;
	
	THIS_CENTERS_CONTENT:;
	max-width:90%;
	vertical-align: middle;
	display: inline-block;
}
#popupboxinner {
	THIS_KEEPS_CONTENT_PLACED:;
	max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
	padding:20px 30px;
	min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
	<span class="fullheight"></span>
	<div id="popupbox">
		<div id="popupboxinner">
			LIGHTBOX CONTENT
		</div>
	</div>
</div>
<span id="openpopup">OPEN</span>

【讨论】:

  • 谢谢。这行得通,尽管在我正在处理的网站上必须有其他东西阻止它。
  • 啊,找到了!在您之前的示例(我使用的)中,您错过了在末尾添加大括号。请修复其他人不要敲他们的头;)
  • 啊,已修复。很抱歉!
【解决方案2】:

在示例灯箱上为您快速标记!基本上,正如诺亚所说,您只需在透明 div 上放置一个点击事件。

如果您在执行代码时遇到问题,请告诉我!

$('#lightbox-wrapper').click(function() {
  $('#lightbox-wrapper, #lightbox').toggleClass('open');
});


function openLightBox() {
  $('#lightbox-wrapper, #lightbox').toggleClass('open');
}
/* DEFAULT STATE */

#lightbox-wrapper {
  display: none;
}
#lightbox {
  display: none;
}
#lightbox-wrapper.open {
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.7);
}
#lightbox.open {
  display: block;
  position: fixed;
  top: 0;
  width: 100%;
  margin: 0 auto;
  margin-top: 40vh;
}
#lightbox-content {
  display: block;
  width: 250px;
  margin: 0 auto;
  background: #f1f1f1;
  padding: 5px;
  text-align: center;
  box-shadow: 0px 0px 5px #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="lightbox-wrapper"></div>
<div id="lightbox">
  <div id="lightbox-content">
    <h1>I'm a lightbox</h1>
  </div>
</div>


<button onclick="javascript:openLightBox()">Open Lightbox</button>

【讨论】:

  • 这并没有解决我的困境。对不起,我没有更好地解释自己。我改变了我原来的问题作为一个效果。
  • 很抱歉,您的示例不起作用。我需要包装来包含灯箱。
【解决方案3】:

要阻止点击传播:

$('#lightbox').click(function(e){
  e.stopPropagation();
});

只需将 #lightbox 替换为您的内部 div(透明 div 内的灯箱)的 id,并将其添加到您现有的代码中。

// 已编辑 - 在末尾添加大括号。 - 保罗

【讨论】:

  • 你能把它放在它的上下文中作为一个工作示例吗?
  • 您可以将其添加到您的工作代码中,或下面的 Schultzie 代码中。
  • 我尝试将它添加到我自己的版本和 Schultzie 的版本中,结果点击什么也没做。如果您能向我展示一个工作示例,我将不胜感激。
  • 对不起@Paul!我想这就是你想要的:点击灯箱不做任何事情,点击灯箱外部关闭灯箱?
  • 问题是在灯箱外点击什么也没做。
猜你喜欢
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多