.on方法在jquery IE8中的bug

时间:2013-11-23 13:28:36

标签: javascript jquery internet-explorer-8

$(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中不起作用。

1 个答案:

答案 0 :(得分:1)

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();
   });