javascript - 在元素上单击触发事件触发输入复选框两次

标签 javascript jquery

当我单击 div 元素时,应该只触发单击复选框一次,但由于某种原因,我的事件被触发两次,我看到其他主题也有类似问题,但没有人帮助我

$('div').click(function(e) {
  $('input').trigger('click');

  check();
});

function check() {
  if ($('input').is(':checked')) {
    console.log('input cheked')
  } else {
    console.log('unchecked')
  }
}
.test {
  height: 150px;
  width: 150px;
  background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test">
  <input type="checkbox" name="">
</div>

最佳答案

问题是因为点击发生在 div 上,这会触发子复选框上的 click,进而向上传播 DOM 并在再次div

如果您尝试为复选框创建更大的点击区域,只需使用 label 元素即可。然后你就可以免费获得这个行为,而不需要任何 JS。

如果您想知道复选框更改时的状态,请将 change 事件处理程序挂接到它。试试这个:

$(':checkbox').on('change', function() {
  if (this.checked) {
    console.log('input checked')
  } else {
    console.log('unchecked')
  }
});
.test {
  height: 150px;
  width: 150px;
  background: red;
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class="test">
  <input type="checkbox" name="">
</label>

关于javascript - 在元素上单击触发事件触发输入复选框两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875484/

相关文章:

vbscript - Internet Explorer 获取内部 IP 地址

Javascript - 在元素的 html 中加载模板

javascript - Javascript 中的 array_chunk 和 For 循环,用于在一个 div 中附加多个元素

javascript - 跳过 FOR 循环中的多个元素,Javascript

javascript - 使用 Aurelia 将数据和文件发布到 ASP.NET webapi

javascript - 为什么我的网站无法在 Iphone 上正确加载?

javascript - Mongoose 回调应用不是函数

javascript - 提交表单跨度消息更改位置为什么?

javascript - 无法使用 jquery 读取 json

javascript - 如何停止退格键或删除键来删除光标之前的文本