1

我有 3 个 div 像这样覆盖:

<div id="div1" style="height: 500px; width: 500px; position:absolute; z-index: 1"></div>
<div id="div2" style="height: 500px; width: 500px; position:absolute; z-index: 2"></div>
<div id="div3" style="height: 500px; width: 500px; position:absolute; z-index: 3"></div>

它们都有 on.click 事件处理程序,可以弹出不同的消息

是否有可能在单击一个时,无论哪个在顶部,它都允许所有通过单击(尝试“指针事件:无”但禁用所有功能)的底层 div 触发其相应的事件处理程序?假设我点击了 div 3 并且 div 2 和 3 也触发了它们的事件处理程序。另外,我不想要硬编码的解决方案,例如:

$('#div3').on('click',function() {
   // trigger div 1 and 2 events manually
})

指针事件的问题:没有人拥有它,不会像我想要的那样触发它的事件处理程序,有什么办法可以解决这个问题?

4

2 回答 2

2

我不确定这个解决方案对你来说是否过于“硬编码”,但它会检测到前面元素后面的任何元素并触发它们的点击处理程序(如果鼠标点击也位于该元素上方)

$('#div3').click(function(e) {
$(this).hide();
var elements = [];
var element;
var count = 0;
element = $(document.elementFromPoint(e.clientX,e.clientY));
while (element.prop("tagName") != "HTML" && count < 15) {
    elements.push(element);
    $(element).hide();
    element = $(document.elementFromPoint(e.clientX,e.clientY));
    count++;
}
$(elements).each(function() {
    $(this).trigger("click");
    $(this).show();
});
$(this).show();
});

小提琴:http: //jsfiddle.net/13jLrarp/3/

尽管技术上不需要,count但可以确保它不会陷入无限循环(以防万一)

在小提琴中,点击绿色框会使红色框水平增长,点击蓝色框会使红色框垂直增长。单击它们重叠的地方会使红色框双向增长。请注意,使用 z-index 红色框放置在其他两个顶部

于 2015-01-23T19:07:35.010 回答
0
    $( "#other" ).click(function() {
      $( "#target" ).click();
    });

来源: http ://api.jquery.com/click/

于 2015-01-23T18:38:57.073 回答