【问题标题】:Chrome and IE doesn't fire change event on time when we click on label assigned for checkbox当我们单击为复选框分配的标签时,Chrome 和 IE 不会按时触发更改事件
【发布时间】:2016-11-09 17:32:45
【问题描述】:

在用户选中复选框时的特定条件下,我想显示一条警报消息并取消选中该复选框,因此要取消选中复选框,我会在其上调用 click 函数,以便它在内部取消选中并触发必要的事件。

我有一个复选框和一个用于复选框的标签,并为标签正确设置了for 属性

  • 在 Firefox 中,取消选中适用于复选框及其标签。
  • 在 chrome 中,取消选中适用于复选框,但不适用于标签。
  • 在 chrome 中,取消选中对复选框或标签不起作用。

通过特定的超时,我能够解决这个问题,但我想要一个不使用超时的解决方案。

您可以在下面查看代码,也可以在此处访问jsfiddle

$("#id1").on("change", function(event) {
  if (event.target.checked) {
    $(event.target).trigger("click");
  }
});

$("#id2").on("change", function(event) {
  setTimeout(function() {
    if (event.target.checked) {
      $(event.target).trigger("click");
    }
  }, 5);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="checkbox" value="" id="id1">
<label for="id1">Click me</label>
<br/>
<input type="checkbox" value="" id="id2">
<label for="id2">Works with timeout</label>
This work quite well with Firefox but not in chrome and IE9, IE10

我正在寻找 javascript 或 jQuery 解决方案

【问题讨论】:

  • 为什么需要这样做?
  • @epascarello :我有一个框,里面有复选框,我允许用户只选择一种类型的框,所以如果用户尝试选择其他类型的框,那么我会显示警报消息和取消选中它,...为什么我要触发点击事件是因为,当复选框被选中时,我也是突出显示框。

标签: javascript jquery html google-chrome internet-explorer


【解决方案1】:

试试这个:

$("#id1").change(function(event) {
  if (this.checked) {
    this.checked = false;
  }
});

我在 chrome 中尝试过,它似乎可以工作,基本上不是单击复选框,而是修改它的状态

jsfiddle

更新jsfiddle触发点击事件

【讨论】:

  • 但它不会触发复选框上的单击事件来取消选中它,所以我的其他依赖于 javascript 取消选中事件的更改会中断
  • 我添加了一个更新的 jsfiddle 触发点击事件
  • 它会触发一个点击事件jsfiddle.net/yL5bxepp/6,如果您寻找一个将监听器附加到更改事件的点击事件,可能问题出在其他地方...“更改”和“点击”是不同的事件.在第一条评论中你说你需要一个点击事件,然后你说你需要一个更改事件,你需要哪个?
  • 我需要更改事件
  • 但是改变事件会在 FF 中被触发两次,对吧?基本上我想避免浏览器特定的代码
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多