ブラウザのリロード時はcheckboxの状態を保持したいのですが、ボタンクリックで再度読み込ませた場合には状態をリセットしたいです。
HTML
1<--! jsで再読み込みさせるトリガー --> 2<select id="type1"> 3 <option value="10">カテゴリ1</option> 4 <option value="11">カテゴリ2</option> 5 <option value="12">カテゴリ3</option> 6 <option value="13">カテゴリ4</option> 7 <option value="14">カテゴリ5</option> 8</select> 9<input type="button" value="検索" class="select-button"> 10 11<--! 保持/リセットしたいチェックボックス --> 12<div id="td1"> 13 <div class="td1_reflesh"> 14 <form> 15 <table> 16 <tr> 17 <td width="130"> 18 <input type="checkbox" name="check[]" value="0" id="img_1" data-savekey="1" class="checkbox"> 19 <label for="img_1"><img src="images/button/check_outdoor.png"></label> 20 </td> 21 <td width="130"> 22 <input type="checkbox" name="check[]" value="1" id="img_2" data-savekey="2" class="checkbox"> 23 <Label for="img_2"><img src="images/button/check_indoor.png"></Label> 24 </td> 25 <td> 26 <input type="button" value="絞り込み" class="submit"> 27 </td> 28 </tr> 29 </table> 30 </form> 31 </div> 32</div> 33
JavaScript
1<script> 2// トリガーのクリックイベント 3 $('.select-button').click(function(e){ 4 e.preventDefault(); 5 var num1 = $('#type1').val(); 6 _reflesh('Axis.php?type1=' + num1 ); 7 return false; 8 }); 9 function _reflesh (url) { 10 var $content = $('#td1').html(); 11 $.ajax({ 12 'url': url, 13 'dataType': 'html', 14 'cache': false 15 }) 16 .then(function(data) { 17 // td1 リフレッシュ 18 var $nextcontent = $(data).find('#td1'); 19 var $childcontent = $nextcontent.children('.td1_reflesh'); 20 $('#td1').html($childcontent); // 書き換え 21 window.history.pushState(null, null, url); 22 },function(xhr, txtstat) { 23 $content.html( '<p>エラーのため表示できません。</p>' ); 24 }) 25 } 26 27// ブラウザリロード時に保持したチェックボックスの値を読み込む 28function save_restore1_checkbox(target_class) { 29 var cbstate; 30 window.addEventListener('load', function () { 31 cbstate = JSON.parse(localStorage['CBState'] || '{}'); 32 33 for (var key in cbstate) { 34 var el_lst = document.querySelectorAll('input[data-savekey="' + key + '"].' + target_class); 35 set_checkbox_checked_all(el_lst, true); 36 } 37 var cb = document.getElementsByClassName(target_class); 38 39 for (var c = 0; c < cb.length; c++) { 40 cb[c].addEventListener('click', function (evt) { 41 var savekey = this.getAttribute('data-savekey'); 42 if (this.checked) { 43 cbstate[savekey] = true; 44 }else if (cbstate[savekey]) { 45 delete cbstate[savekey]; 46 } 47 localStorage['CBState'] = JSON.stringify(cbstate); 48 }); 49 } 50 }); 51 52 function set_checkbox_checked_all(el_lst, checked) { 53 for (var c = 0; c < el_lst.length; c++) { 54 var el = el_lst[c]; 55 if (el) { 56 el.checked = checked; 57 } 58 } 59 } 60} 61save_restore1_checkbox('checkbox'); 62</script>
試したこと
上記の処理ではボタンクリックで一見リセットされたように見えるのですが、ブラウザでリロードすると前の保存状態へ戻ってしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/16 02:16
2021/06/16 03:31 編集
退会済みユーザー
2021/06/17 23:57