【问题标题】:JQuery is:checked returning two values every clickJQuery is:checked 每次点击返回两个值
【发布时间】:2021-10-27 02:32:47
【问题描述】:

我有一段简单的代码可以在选中复选框时显示信息 div,如果未选中则隐藏该 div。在构建时,我遇到了一个我找不到任何信息可以解决的问题。为了简化问题,我有一个 if 语句,如果输入被检查,它将记录“检查”。如果未选中,则会记录“未选中”。

$("#my-id") 是一个 div,其中包含一个带有复选框输入的标签

<div id='my-id'>
  <span>
    <label>
      <input type="checkbox">
      test
    </label>
  </span>
</div>

所以点击它会选择和取消选择复选框输入。

$("#my-id").unbind('click').click(function(){
    if($(this).find('input').is(':checked')){
        console.log('checked');
    }
    else {
      console.log('not checked');
    }
});

我一键在日志中看到的是:

not checked
checked

然后当我再次点击同一个时,会显示

checked
not checked

这弄乱了 slideUp() 和 slideDown() 函数,因为它们最终被调用了两次,并且我的页面的某些部分上下滑动。任何见解将不胜感激。我确定 JQuery 有一些东西,或者是我还不了解的功能。

【问题讨论】:

  • 那你为什么不绑定到复选框更改事件?
  • 不清楚该代码将如何触发 console.log 2 次。我认为我们需要对此进行演示以充分帮助您。
  • 您的代码有效,我什至使用纯 JS 对其进行了测试,因此您的代码中肯定发生了其他事情 - 可能会在某处触发“点击”:jsfiddle.net/359jcnrx
  • Ryan,感谢您在 jsfiddle 中进行设置。当我单击它并查看日志时,“未检查”和“已检查”都出现了,这就是我的困惑所在。为什么执行 If 语句的两个结果。

标签: jquery checkbox


【解决方案1】:

这似乎仅在您单击&lt;label&gt; 标记时才会发生。当您单击&lt;div&gt;&lt;span&gt;&lt;input&gt; 时,它可以正常工作。

此行为可能在此处解释:Why the onclick element will trigger twice for label element

一种解决方法是将return false; 添加到您的点击处理程序中:

$("#my-id").unbind('click').click(function(){
    if($(this).find('input').is(':checked')){
        console.log('checked');
    }
    else {
      console.log('not checked');
    }
    return false; // Prevents event handler from being called twice
});

你也可以在事件对象上调用.preventDefault(),防止它被调用两次:

$("#my-id").unbind('click').click(function(e){
    if($(this).find('input').is(':checked')){
        console.log('checked');
    }
    else {
      console.log('not checked');
    }
    e.preventDefault();
});

【讨论】:

  • 感谢您分享该链接,我认为这是正在发生的事情。我正在失去理智试图理解它为什么会发生哈哈。
  • e.preventDefault() 删除了标签创建的点击事件,然后我使用 jQuery 将 input 属性设置为 true 或 false。完成此操作后,其余代码的行为正常。如果您打算向其中添加自己的点击事件,则有点违背在标签内添加复选框的目的,因此吸取了教训。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多