2016-01-21 71 views
0

首先的图标不工作时,我就不会发现这个问题在这里,所以我不知道它是否已仍不回答。jQuery的侦听器点击一类,但点击里面

我有一个监听器,用于监听我网站中的所有点击,然后调用一个函数来检查目标是否具有类“wave”。如果是这样,它会显示波浪效果。

我有这个类的瓷砖,它工作正常,除了他们有大图标,并且如果您单击它们,它不会将其识别为类的目标。

我试图把所有的瓷砖都放在一个div里面,但是它不能识别它作为这个类的目标(我假设它识别为点击里面的目标)。

我试图把'真'放在听众的尽头,以防冒泡方向可以帮助我,但事实并非如此。

有什么想法?预先感谢并为我的无知感到遗憾。

的jsfiddle

<div class="tile-container"> 
    <div class="tile efecteona"> 
    <h3 class="titol-tile">Gràfics</h3> 
    <i class="fa fa-bar-chart tile-icon "></i> 
    </div> 
</div> 

“efecteona”将是“波”级 https://jsfiddle.net/qtLvef8o/2/

+3

代码

更新的演示吧。更好的是,一个http://jsfiddle.net – dan08

+0

你可以使用CSS添加图标作为背景图片吗? – medinasod

+0

我无法将它们添加为背景,因为它们在悬停时变得更大,并且根据图块具有不同的属性。我正在做一个jsfiddle,我会在一分钟内完成,谢谢 – Xavi

回答

1

正如其他答案注释,target返回实际点击的元素,在这种情况下是图标,而不是与类的div。

由于您使用jQuery不过,为什么不使用其委托语法,允许吗?

$(document).on('click', '.efecteona, button', addOnaEffect); 

and set target = this inside your hander。在https://jsfiddle.net/qtLvef8o/4/

+0

这是一个很好的观点。只要OP使用jQuery,他应该尽可能多地利用它来提高可读性和性能。 – iMoses

0

当你问它得到了我元素e.target,和我元素没有你需要的类,也没有标记名按钮。

加上这个console.log(target);在你的线var target = e.target;旁边,你会看到我在说什么。

+0

我知道,这就是我的观点。我想单击图标时获取div元素。或者只要点击瓷砖中的任意位置,就可以在整个div中执行波效应 – Xavi

+0

然后使用@imoses所说的最接近的方法。 – kpucha

0

当您单击事件冒泡一路攀升到文档中的元素,而目标始终是其初始化它的元素。就你而言,看起来你的代码假设target是一个tile元素,而实际上它也可以是图标元素。

既然你标记您正在使用jQuery的问题,有一个简单的解决方案。使用jQuery closest方法。

var target = $(e.target).closest('.efecteona, button').get(0); 

Code example