0

我在另一个图像之上有一个绝对定位的图像。
现在,当我将单击事件绑定到背景中的图像并单击覆盖图像时,单击事件不会像预期的那样冒泡到背景图像。
同时,它确实会进一步上升到底层 div。

<div class="container">
    <img src="http://dummyimage.com/600x400/000/fff&text=Background" id="bg" />
    <img src="http://dummyimage.com/100x100/ff00ff/000000&text=Overlay" id="overlay" />
</div>  



$(function(){
    $("#bg").on("click", function(){
          alert("Click on background"); 
    });   
    $("#overlay").on("click", function(){
          alert("Click on overlay - should bubble to background and container"); 
    });      
    $(".container").on("click", function(){
        alert("Click on either overlay or background which bubbled through to the container");
    });
});

jsfiddle在这里:http: //jsfiddle.net/V9dkD/2/

我真的不明白为什么会这样。
如何在不更改 html 结构的情况下使顶部图像的点击冒泡到背景图像?

4

2 回答 2

1

您必须触发对另一张图片的点击。对于鼠标事件,重要的是结构而不是位置。

$(function(){
    $("#bg").on("click", function(){
          alert("Click on background"); 
    });   
    $("#overlay").on("click", function(){
          alert("Click on overlay - should bubble to background and container");
          $("#bg").trigger('click');
    });      
    $(".container").on("click", function(){
        alert("Click on either overlay or background which bubbled through to the container");
    });
});

这是一个分叉的小提琴。请注意,这将导致.containerclick 事件处理程序触发两次。return false您可以在处理程序中防止这种情况bg。您只需要根据您的实际用例进行一些调整。

于 2013-05-24T15:48:52.480 回答
0

您真正需要更改的唯一一件事是#overlay 的事件处理程序

$("#overlay").on("click", function(){  
    alert("Click on overlay - should bubble to background and container"); 
    $('#bg').trigger('click')
});

js 中有两个事件循环 - 捕获和冒泡,当它从根到通过后代到元素并返回时。事件不使用页面上的定位来传播,只有 DOM 结构很重要。

于 2013-05-24T15:49:02.093 回答