Wywołaj zdarzenie na input.checked = true / false _ bez_ jQuery

Rozważ następujący kod (http://jsfiddle.net/FW36F/1/):

<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=!document.getElementsByTagName('input')[0].checked;">toggle</button>

Jeśli klikniesz pole wyboru, otrzymasz alert informujący, czy jest zaznaczony, czy nie. Świetny. Jeśli jednak klikniesz przycisk przełączania, pole wyboru zmieni stan zaznaczenia, ale zdarzenie onchange NIE jest uruchamiane.

Zasadniczo onchange dla pola wyboru uruchamia się tylko wtedy, gdy użytkownik kliknie pole wyboru,nie jeśli pole wyboru zostało zmienione przez JavaScript. Dotyczy to IE, FF i Chrome. Wydaje się, że to zachowanie jest również zgodne ze specyfikacją.

Jednak naprawdę potrzebuję jakiegoś zdarzenia do wystrzelenia, jeśli z jakiegokolwiek powodu zaznaczone pole wyboru zmieni się. czy to możliwe?

O tak, ijQuery nie jest dozwolone. I proszę, nie zadawaj żadnych rozwiązań opartych na setTimeout / setInterval ...

Aktualizacja: Powinienem też wyjaśnić, że powyższy kod służy jedynie do ilustracji. W prawdziwym kodzie musimy upewnić się, że stan pola wyboru jest zaznaczony lub odznaczony - nie tylko przełączaj go. Być może byłby to lepszy kod ilustrujący to:

<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=true;">check</button> 
<button onclick="document.getElementsByTagName('input')[0].checked=false;">un check</button>

Ponadto może istnieć kod w innych obszarach, których nie kontrolujemy w pełni, co może zrobić proste .checked = true / false - chcielibyśmy się upewnić, że to również widzimy.

questionAnswers(4)

yourAnswerToTheQuestion