jquery IE8 bug 中的 .on 方法

.on method in jquery IE8 bug

本文关键字:on 方法 中的 bug IE8 jquery      更新时间:2023-09-26
$(function() {
  var inputChecked = "skills__label_checked",
      radioChecked = "education__label_checked",
      elemsInput   = $(".skills__input_checkbox, .education__input_radio");
  function setLabelClass() {
    elemsInput.each(function(i, e) {
      $(e).parent('label')[e.checked?'addClass':'removeClass']
      ($(e).is(':radio')?radioChecked:inputChecked);
    });
  }
  elemsInput.on('change', setLabelClass);
  setLabelClass();
});

这在所有现代浏览器(包括 IE9+(中都运行良好,但在 IE8 中不起作用。

IE8(以及更早版本(在更改事件上存在很大错误:

IE 5-8 在复选框或单选标记模糊时触发事件,而不是 当它被激活时。这是一个严重的错误,需要用户 执行其他操作并阻止一致的跨浏览器界面 基于复选框和单选单机上的更改事件。

参考: http://www.quirksmode.org/dom/events/change.html

尝试将事件处理程序从 change 更改为 click 或尝试修复强制触发更改事件的行为(未测试(:

  $('.skills__input_checkbox, .education__input_radio').click(function () {
        // Cause the change() event
        // to be fired in IE8 et. al.
        this.blur();
        this.focus();
   });