javascript - 为什么 onclick 会被触发两次?

标签 javascript jquery

这是我一直在研究的一小段代码:

我想要的只是添加一个 active 类以在单击同一元素时添加标签,并保持默认行为不变。

不知道为什么点击事件被触发了两次??

$('label.add-to-favourite').click(function(e){
  alert("here");
  $(this).toggleClass('active');
});
.add-to-favourite span{
    cursor: pointer;
    color: #d2d6de;
}


.add-to-favourite:hover span, .add-to-favourite.active span {
    color: #CB3D3D;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet"/>

<ul>
  <li>
    <label class="add-to-favourite">
      <span class="fa-stack fa-lg">
          <i class="fa fa-circle fa-stack-2x"></i>
          <i class="fa fa-heart fa-stack-1x fa-inverse"  title="Add to Favourites" data-toggle="tooltip"></i>
      </span>
      <input type="checkbox" name="favourites[]" value="1">
    </label>
  </li>
  <li>
    <label class="add-to-favourite">
      <span class="fa-stack fa-lg">
          <i class="fa fa-circle fa-stack-2x"></i>
          <i class="fa fa-heart fa-stack-1x fa-inverse"  title="Add to Favourites" data-toggle="tooltip"></i>
      </span>
      <input type="checkbox" name="favourites[]" value="2">
    </label>
  </li>
</ul>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

当您点击标签时,它会触发复选框的点击事件。

但点击标签也会自动向关联的输入元素发送点击事件,因此这被视为点击复选框。然后事件冒泡导致在包含元素(即标签)上触发点击事件,因此您的处理程序再次运行。

像这样把复选框放在标签外面

<label></label>
<input type="checkbox">

更新:您也可以按照@Rejith R Krishnan 的建议,在复选框而非标签上设置点击事件处理程序

关于javascript - 为什么 onclick 会被触发两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38349404/

相关文章:

javascript - 如何获取号码的最后一位

Javascript Math.floor 函数失误还是实现之谜?

Jquery DatePicker 到多个元素。?

javascript - 在特定 id/class 上使用 pinterest 保存按钮?

javascript - nodejs 比较 Unicode 文件名

javascript - 隐藏页脚 javascript 中的固定元素

jquery - 视频干扰下拉?

javascript - 跳过从数据库到 html 的 AJAX 值

java - JQuery TokenInput 不显示搜索结果

javascript - 了解 CSS 对于 JS 开发人员有多重要?