2013-11-23 30 views
1
$(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中不起作用。.on方法在jquery IE8中的bug

+5

哪個版本的jQuery的是你在用嗎? 2.x分支放棄了對IE8的支持。 –

+0

@FrédéricHamidi,jQuery v1.10.2 – user3024944

+1

什麼不起作用?我相信在某些時候有一個IE錯誤,直到控件失去焦點時纔會觸發更改事件。這是發生了什麼? – Jason

回答

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