ikon0518
@ikon0518 (o mi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

画面遷移したときに前ページのチェックボックスの値を渡したい

解決したいこと

画面遷移したときに前ページのチェックボックスの値を渡したい

まず1つめのhtmlに

<form> 
<div class="food">
  <input type="checkbox">
  <input type="checkbox">
  <input type="checkbox">
</div>
<div class="drink">
  <input type="checkbox">
  <input type="checkbox">
  <input type="checkbox">
</div>
</form>

このようにチェックボックスがあり、div内で1つのみ選択できるようにしてあります。

2つ目のページでは
<div class="food">で選択したボタンによってページが変わるようにonclickで設定しています。

3つ目のページでは
1つめのページの<div class="drink">で選択したボタンによって次のページに飛ばすようにしたいです。
ここで、1ページ目のチェックされた値を取得したいです。

これが、調べても出てこなかったので
できるのかどうかとヒントをいただきたく
質問いたしました。 

よろしくお願いします。

1

1Answer

ひとつの方法として、sessionStorageを使用する方法などが考えられるかな、と思います。

page1.html
food
<div class="food">
  <input type="checkbox" value='ライス'>ライス
  <input type="checkbox" value='パン'>パン
  <input type="checkbox" value='ケーキ'>ケーキ
</div>
drink
<div class="drink">
  <input type="checkbox" value='コーヒー'>コーヒー
  <input type="checkbox" value='紅茶'>紅茶
  <input type="checkbox" value='ミルク'>ミルク
</div>

<a href='./page2.html'>→ page2</a>

<script>
// アンロード直前にチェックボックスの状態をsessionStorageへ保存
window.addEventListener('beforeunload', () => {
  sessionStorage.setItem('checkList',
    JSON.stringify({
      food: [...document.querySelectorAll('.food input[type=checkbox]:checked')].map(e => e.value),
      drink: [...document.querySelectorAll('.drink input[type=checkbox]:checked')].map(e => e.value),
    })
  );
});

// 以下は必要に応じて
window.addEventListener('DOMContentLoaded', () => {
  // リロード時に各チェックボックスの状態をsessionStorageから復元
  const list = JSON.parse(sessionStorage.getItem('checkList'));
  [...document.querySelectorAll('.food input[type=checkbox]')].map(e => e.checked = list?.food?.includes(e.value));
  [...document.querySelectorAll('.drink input[type=checkbox]')].map(e => e.checked = list?.drink?.includes(e.value));
});
</script>
page2.html
food
<div class="food">
</div>
drink
<div class="drink">
</div>

<script>
const list = JSON.parse(sessionStorage.getItem('checkList'));

document.querySelector('.food').textContent = list?.food?.join(', ') || '-';
document.querySelector('.drink').textContent = list?.drink?.join(', ') || '-';
</script>
2Like

Comments

  1. @ikon0518

    Questioner

    綺麗なコードで回答ありがとうございます🙇
    質問が下手で申し訳ないのですが、
    page2.htmlにも次に進む → page3 のボタンがあり、page1のdrink
    のチェックによってそれぞれ次のページ進むことは可能でしょうか?
  2. sessionStorageのデータは意図的に削除するかブラウザを閉じるまで残りますので、page2.htmlをそのままpage3.htmlとしてコピーし、page2.htmlにpage3.htmlへのリンクを追加すればpage1.htmlからの情報が引き継がれるのが確認できると思います。
  3. @ikon0518

    Questioner

    理解できました!!
    本当に丁寧に教えてくださってありがとうございました🙇‍♂️

Your answer might help someone💌