如何将事件stopPropagation限制为祖先元素?

时间:2015-03-25 11:38:06

标签: javascript jquery

是否可以阻止传播到某个祖先元素!

但是我们可以通过在父事件本身中为该事件添加event.stopPropagation()来实现,但这可能会阻止某些情况。

1 个答案:

答案 0 :(得分:1)

您可以检查事件的目标,并仅停止那些来自您希望停止传播的元素的事件。
(如果你使用jquery,它可以更容易地完成。不知道用js更好的方法。)

if(event.target == document.getElementById('elementToBlock'))event.stopPropagation();

这样其他事件仍在传播 如果你有很多元素并且你不想为它们添加一个公共类,你也可以将它们分组为div并停止从那里传播的所有事件。
用jquery制作样本:

$('#dontPropagateThroughHere').on('click', '.dontPropagate', function(event) {
  event.stopPropagation();
  alert('Stopped by dontPropagateThroughHere');
})

$('#propagationBlocker').on('click', function(event) {
  event.stopPropagation();
  alert('Stopped by propagationBlocker');
})

$('#eventsThatGotThrough').on('click', function(event) {
  alert('Event got through');
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='eventsThatGotThrough'>
  <div id="dontPropagateThroughHere">
    <div id="propagationBlocker">
      <div>Don't propagate inside blokker div</div>
      <div>Don't propagate inside blokker div</div>
      <div>Don't propagate inside blokker div</div>
    </div>
    <br/>
    <div class="dontPropagate">Don't propagate</div>
    <div class="dontPropagate">Don't propagate</div>
    <div class="dontPropagate">Don't propagate</div>
    <br/>
    <div>Let me propagate</div>
    <div>Let me propagate</div>
    <div>Let me propagate</div>

  </div>
</div>