▽1
●
a-kuma3 ●200ポイント ベストアンサー |
チェックボックスの状態を、ページのロード完了時にもすれば良いだけじゃん、と思ったのですが、さにあらず。
別のページから history.back して戻ってきたときに、this が指している要素の checked が true にならない。
Firebug の DOM インスペクタでは checked が true になっていたので、試しに getElementById を使ってみると、何故か正しく状態が取得できました。
こんな感じ(元のコードをなるべく残してます)。
function control_input() { // var chk = $(this).prop('checked'), var chk, obj = $('#test_input'); chk = document.getElementById(this.id).checked; // ★これ! (chk) ? obj.prop('disabled',false) : obj.prop('disabled',true) ; } $(function() { $('#test_chk').on('change', control_input); control_input(); // ロード時にも呼んでやる });
因みに、こうすれば良いはずだ、と最初に思ったものがこちら。
function control_input() { var chk = $(this).prop('checked'), obj = $('#test_input'); (chk) ? obj.prop('disabled',false) : obj.prop('disabled',true) ; } $(function() { $('#test_chk').on('change', control_input); control_input(); // ロード時にも呼んでやる });
履歴で戻ってくると、$(this).prop('checked') が undefined 。
this.checked も同様に undefined。
タイミングの問題かもと思って、setTimeout しても同じだし、試しにボタンを作って、その click から呼んでみても同じ。
見た目はチェックが入っているのに...