【发布时间】:2014-10-20 21:41:44
【问题描述】:
所以我正在创建一个小部件,如果用户点击它之外的任何地方,它应该“关闭”。
显而易见的解决方案是在文档上放置一个点击处理程序。这很好,除了应用程序的其他部分使用 event.stopPropagation()。所以我们在监听器中使用捕获阶段来解决这个问题。
这似乎适用于一切,iframe 除外。我做了一个simple jsfiddle to demonstrate what I'm talking about。代码抄本:
var c = document.getElementById('clickme');
var s = document.getElementById('stop');
var t = document.getElementById('text');
document.addEventListener('click', function (event) {
if (event.target !== c) {
t.innerHTML += 'outside <br>';
} else {
t.innerHTML += 'inside <br>';
}
}, true); //true to use capturing phase
s.addEventListener('click', function (event) {
event.stopPropagation();
});
还有设置:
<html>
<body>
<p>Clicking anywhere but the button counts as an 'outside' click. However, clicks within the iframe do not trigger the event listener.</p>
<div><button id="clickme">Click me!</button></div>
<iframe>lalala</iframe>
<div><button id="stop">Even Me, and I stopPropagation()</button></div>
<div id="text"></div>
</body>
</html>
有没有办法让这个处理程序也触发 iframe 内/上的点击?此外,在我附加事件侦听器时,我不会引用 iframe,因此最好使用不需要它的解决方案。
【问题讨论】:
标签: javascript iframe