我有一个div包含几个可点击,可拖动和可调整大小的元素。 我还希望这些可移动元素消失在部分透明(背景)图像后面。 除了Internet Exploder之外,这一切都很好用。
我的代码(减少到产生问题的最小值)看起来像这样:
<div id="container" style="z-index: 200; position: absolute">
<div style="position:absolute; width: 20px; height: 80px; background-color: red; opacity: .2"></div>
<div id="works">not works</div>
</div>
我还在这里创建了一个小提琴:http://jsfiddle.net/ZUfp5/11/
正如您在控制台中看到的那样,直接单击该元素将触发处理程序,但如果您单击叠加层则不会。
不应该是事件泡沫吗?
有什么方法可以让这个工作或者网络爆炸再次破坏它吗?
更新
我编辑了小提琴以使其与Firefox一起使用,因此问题可以在其全部范围内完成
答案 0 :(得分:3)
问题不在于事件冒泡。问题是你的叠加层隐藏了“非工作层”。 CSS pointer-events
for non SVG elements is not supported in IE9。
当事件达到#container
时,事件目标不是#works
,但是您的叠加层因此jQuery不会触发您的事件。
这里可以描述一个解决方案: http://www.vinylfox.com/forwarding-mouse-events-through-layers/
基本上,他将事件绑定到叠加层,并通过以下方式处理它们:
这是你的例子的分叉小提琴,它实现了这一点。 http://jsfiddle.net/QY69w/
如果你的事件是“mousemove”等等,也许有必要在mousedown上隐藏你的叠加层,并且只在mouseup上显示它(而不是在之后立即显示)。
答案 1 :(得分:2)