次のコードを検討してください ( 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>
チェックボックスをクリックすると、チェックされているかどうかを知らせるアラートが表示されます。偉大な。ただし、トグル ボタンをクリックすると、チェックボックスはチェック状態に変わりますが、onchange イベントは発生しません。
基本的に、チェックボックスの onchange は、チェックボックスが JavaScript によって変更された場合ではなく、ユーザーが実際にチェックボックスをクリックした場合にのみ発生します。これは、IE、FF、および Chrome に当てはまります。この動作も仕様どおりのようです。
ただし、何らかの理由でチェックボックスのチェック状態が変化した場合、何らかのイベントを発生させる必要があります。これは可能ですか?
そうそう、jQuery は許可されていません。また、setTimeout/setInterval ベースのソリューションも使用しないでください...
更新:また、上記のコードは説明のみを目的としていることを明確にする必要があります。実際のコードでは、チェックボックスを切り替えるだけでなく、チェックボックスの状態がチェックされているかチェックされていないかを確認する必要があります。おそらく、これはそれを説明するためのより良いコードになるでしょう:
<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>
さらに、完全には制御できない他の領域にコードが存在する可能性があり、単純な .checked=true/false を実行する可能性があります。これも確認したいと考えています。