チェックボックス入力のクリックイベントにバインドする場合、イベントハンドラーが実行されるまでにチェックボックスは既に切り替えられており、さらに奇妙なことに、event.preventDefault()を指定すると、イベントハンドラーの実行後に切り替えが逆になります。
<input id="foo" type="checkbox"/>
function clicked(evt) {
alert(document.getElementById('foo').checked);
evt.preventDefault();
}
document.getElementById('foo').addEventListener('click',clicked);
[クロームとFirefoxでテスト済み]
アラートは「true」(またはチェックボックスのプリクリックの反対の状態)で応答します。アラートを閉じると、チェックボックスが元に戻ります。
だから、質問は、
防止されている実際のデフォルトイベントは何ですか?状態が変更される前にイベントハンドラーが実行されていると想定するのは間違っていますか?チェックボックスのクリックを合法的に傍受する方法はありますか?
そして、なぜ世界でpreventDefaultがチェックボックスの再切り替えを引き起こしているのですか?