0

我似乎找不到制作选择器的正确方法,它应该只在 DIV 的背景和主图像上触发点击 - 如果有,但如果我点击位于该 div 中的其他一些元素 -像 hrefs 等 - 它应该什么都不做。

我试过这个:

$('#SHOWCASE, #SHOWCASE > img')

Showcase - 是 DIV 的 ID,img 是直接附加到它的图像。但是,如果我向它添加 .Click 函数,它仍然会触发该 div 中的任何元素,例如链接等,请注意这些链接也具有绝对位置。

那么有什么解决方案吗?

4

4 回答 4

5

以最简单的方式,只需测试单击的元素是否是您将处理程序绑定到的元素:

$('<selector>').click(function(event) {
    if(event.target === this) {
        // do something
    }
});

参考event.target

于 2012-04-30T10:54:56.110 回答
2

这是正常行为,因为事件会在 DOM 中冒泡。您应该检查事件对象target的内部以查看最初单击的是哪个元素:

$('#SHOWCASE').on('click', function (e) {
    if ($('#SHOWCASE, #SHOWCASE > img').is(e.target)) {
        // Only do something if it was those elements.
    }
});
于 2012-04-30T10:55:01.490 回答
0

您需要阻止该 div 中的其他元素冒泡。像 jQuery 的 stopPropagation() 这样的东西应该可以解决问题。将其添加到#SHOWCASE 的所有子项中。

于 2012-04-30T10:54:53.500 回答
0
$('#hello, #hello > img').on('click', function(e) {
    if(e.target == this) {
        console.log(this);
    }
});
于 2012-04-30T10:56:33.473 回答