如何阻止事件在复选框单击时冒泡

2022-08-30 01:23:24

我有一个复选框,我想对单击事件执行一些Ajax操作,但是该复选框也位于具有自己的单击行为的容器中,我不想在单击该复选框时运行该行为。此示例阐释了我想要执行的操作:

$(document).ready(function() {
  $('#container').addClass('hidden');
  $('#header').click(function() {
    if ($('#container').hasClass('hidden')) {
      $('#container').removeClass('hidden');
    } else {
      $('#container').addClass('hidden');
    }
  });
  $('#header input[type=checkbox]').click(function(event) {
    // Do something
  });
});
#container.hidden #body {
  display: none;
}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="container">
  <div id="header">
    <h1>Title</h1>
    <input type="checkbox" name="test" />
  </div>
  <div id="body">
    <p>Some content</p>
  </div>
</div>

但是,我无法弄清楚如何在不导致默认单击行为(复选框变为选中/未选中)不运行的情况下阻止事件冒泡。

以下两项操作都会阻止事件冒泡,但也不会更改复选框状态:

event.preventDefault();
return false;

答案 1

取代

event.preventDefault();
return false;

event.stopPropagation();

event.stopPropagation()

阻止事件冒泡到父元素,防止任何父处理程序收到事件通知。

event.preventDefault()

阻止浏览器执行默认操作。使用方法 isDefaultPrevented 可以知道是否曾经调用过此方法(在该事件对象上)。


答案 2

使用停止传播方法:

event.stopPropagation();