Déclencher un événement sur entrée.checked=true/false _without_ jQuery

Considérons le code suivant (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>

Si vous cliquez sur la case à cocher, vous recevez une alerte vous indiquant si elle est cochée ou non. Grand. Toutefois, si vous cliquez sur le bouton bascule, la case à cocher change d'état coché mais l'événement onchange n'est PAS déclenché.

Essentiellement, le onchange pour une case à cocher se déclenche uniquement si l'utilisateur clique sur la case, pas si la case est modifié via JavaScript. C'est vrai dans IE, FF et Chrome. Il semble que ce comportement est à la spécification également.

Cependant, j'ai vraiment besoin d'une sorte de cas d'incendie si, pour une raison quelconque, la case est cochée, les modifications de l'état. Est-ce possible?

Oh ouais, et jQuery n'est pas autorisé. Et s'il vous plaît pas setTimeout/setInterval solutions à base de...

Mise à jour: Aussi, il faut préciser que le code ci-dessus est à titre d'illustration uniquement. Dans le code réel, nous devons nous assurer de l'état de la case à cocher est cochée ou décochée, pas seulement de l'activer. Peut-être que ce serait mieux de code pour illustrer le fait que:

<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>

En outre, il peut y avoir des code dans d'autres domaines, nous ne sommes pas entièrement le contrôle, ce qui pourrait faire un simple .checked=true/false -- nous aimerions nous assurer de voir que.

jQuery ne serait pas le feu le natif de l'événement de changement de juste en fixant sa valeur
Quel est le problème avec les délais d'attente? Je ne pense pas qu'il y a autre chose qui va travailler.
Je ne peux pas croire que vous demandé quel est le problème avec les bureaux de l'aide d'un délai d'attente. C'est comme lancer des cycles de loin,et l'ajout d'un délai lorsque vous êtes averti. Le moins de délai, plus vous perdez de cycles CPU. Il y a beaucoup de réponses ici qui satisfont à l'exigence de l'OP
Pas avec les restrictions qu'il est imposé sur la solution. Il veut savoir quand le checked des modifications de la propriété.
C'est vrai, je n'ai pas vu la partie où l'OP dit que certaines autres parties du code peut être simplement mise checked=true directement. Avec cet avertissement, l'interrogation est la seule réponse. Sauf dans les FF, où vous pouvez utiliser Object.watch Voir plus de ma réponse.

OriginalL'auteur jwl | 2012-05-17