jQuery单击多个元素上的事件触发(我只想要1)
jQuery Click Event Triggering On Multiple Elements (I only want 1)
当我的覆盖出现时,一切都很好,但我添加了一些代码来关闭覆盖,但即使我只是点击箭头,这个代码也会被触发。以下是被触发的代码,当我没有单击箭头来更改图像时,这很好。但当我点击箭头时,作为覆盖的背景也被触发,所以图像在变化,但覆盖也在隐藏。
$('#overlay').click(function() {
$(this).fadeOut('slow');
});
我如何才能在不点击背景覆盖的情况下使用箭头?如果你打开这个项目,你就会明白我在说什么。
打开项目:https://htmlpreview.github.io/?https://github.com/rodriguesandrewb/photo_gallery_v1/blob/master/index.html
要打开存储库:https://github.com/rodriguesandrewb/photo_gallery_v1
您想要使用event.stopPropagation()
:https://api.jquery.com/event.stoppropagation/
这可以防止事件冒泡(由其他元素触发)
您最喜欢的元素是#overlay
。这意味着,无论您在哪里单击,都将始终单击#overlay
元素。这就是您的回调总是被触发并关闭图像的方式。
要解决您的问题并使您的图像只在点击时关闭,您可以使用:
$('#changeImage').click(function() {
$(this).closest('#overlay').fadeOut('slow');
});
好的,有很多代码需要整理,所以我猜你的覆盖层是
<div id="overlay" style="display: block;"></div>
而你的event.target
就在这个里面:
<div class="mainCenter">
<div class="container">
<div id="topFixed">
<input type="text" id="search" placeholder="Search">
</div>
<ul id="gallery">
.......
我不能100%确定你的event.target
在哪里(你想点击的元素,而不是其他元素)。但可以肯定的是,在你点击你想要的按钮后,事件会继续在事件链上冒泡。事件链基本上是位于事件链最顶端的event.target's ancestors which includes
#覆盖层。
为了防止事件冒泡(btw冒泡是默认行为,但在像您这样的情况下,这是不需要的。)请尝试将stopPropagation()
放在事件处理程序的末尾或里面。
我希望我能更具体地说明在哪里以及如何应用此代码,因为它与您的源代码有关,但您没有提供与您的事件监听器、事件处理程序等相关的特定领域。
本例中使用了#overlay
,但我建议您改用event.target
父级。此代码的目的是通过相互共享的父元素接受诸如"点击"一个元素(即按钮)或多个元素(如按钮)之类的事件。这是一个可以点击几个不同按钮的地方。一开始你会认为这是没有意义的,你会说,"当然,这个按钮是因为点击了父项,但现在父项链接到的所有内容都会触发其他所有内容。"
这是正确的,除非我们在事件处理程序的最后有stopPropagation();
。这将阻止事件在事件链上的传播,这样就不会再有到处都是流氓触发器了。Rogue Triggers®听起来是一个很棒的乐队名称P
有关详细信息和更好的解释:http://www.kirupa.com/html5/handling_events_for_many_elements.htm
var overlay = document.querySelector("#overlay");
theParent.addEventListener("click", doSomething, false);
function doSomething(e) {
if (e.target !== e.currentTarget) {
var clickedItem = e.target.id;
alert("Hello " + clickedItem);
}
e.stopPropagation();
}
- 我只想在给出条件时调用一些循环.但这是错误
- 我只想在卡片悬停上悬停动画,而不是在身体上
- 如果我只想从数组中打印任何一个元素.任何数组.那么代码会是什么
- 当我只想要1时,获取返回的所有错误消息
- 只想在页面上未加载初始数据时显示加载gif
- 如何使用javascript从数据库中获取值,我使用的是jquery自动完成,我只想从数据库中搜索值
- 只想在用户单击 html 表单上的“提交”时显示绿色复选标记
- 检查时间冲突,只想显示 1 个警告
- 只想在WordPress中使用jQuery在主页上加载弹出窗口
- 如果我只想在我的应用程序中使用表单生成器,则 Alloy UI 的 zip 文件中要包含哪些文件夹
- 我只想在警报中打印数据,但每当它提醒我 [对象对象] 但我希望它会显示我的表数据行
- 只想在一定时间后页面重定向到所需的链接
- 我只想在输入某些文本时更改其颜色
- 我只想在 Iframe 中加载(实时)源 url 的正文
- 回调被多次调用,但我只想要最后一个回调
- 我只想让我的页面刷新一次
- Div 显示:无 - 只想在内容可见时加载内容
- 离子事件侦听器在每个屏幕上触发,只想应用于一个控制器
- jQuery单击多个元素上的事件触发(我只想要1)
- 是否有可能绑定到Click事件而不使用匿名函数——我只想调用命名函数