質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1758閲覧

jQueryでフォームのselectからchangeで動作させたものをブラウザバックしても保持したい

yooashleaf

総合スコア32

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

2クリップ

投稿2019/02/24 23:00

jQueryでフォームのselectからchangeで動作させたものをブラウザバックしても保持したい

以下の様なフォームで
質問1でセレクトから選ぶと、質問2に自動的に選択肢が入るようになっております。

質問1で
野球が選ばれた場合は変数A1から
サッカーが選ばれた場合は変数A2から
質問2のセレクトにセットされます。

ここまでは正常に動作するのですが、
次のページに遷移して、ブラウザバックしてくると
質問1の選択肢が解除されてしまう仕様になっています。

これはそのようにコードが書かれているので当然なのですが、
ブラウザバックしてきた場合に、changeは発動しないので、
仕方なく質問1を初期化しております。

これをブラウザバックしてきても、
質問1と質問2で選んだものが選択されているようにするには、どうしたら良いでしょうか?

どなたかご教授お願い致します。

#HTML

<form method="post" action="○○" name="form1"> <h1>1.好きなスポーツを指定してください。</h1> <select name="sports" id="parent"> <option value="">選択して下さい</option> <option value="A1">野球</option> <option value="A2">サッカー</option> </select> <h1>2.好きなチームを指定してください。</h1> ※先に質問1を指定してください<br> <select name="team" id="child"> <option value="">選択して下さい</option> </select> <input type="submit" value="送信"> </form>

#JS

<script> jQuery(function($){ var team = { A1:[ '巨人', 'ヤクルト', '広島', '横浜', '中日', '阪神', ], A2:[ 'ヴェルディ', 'マリノス', 'サンフレッチェ', 'レッズ', 'ベルマーレ', ], }; var noValue = $('#child').html(); //フォーム選択による動作 $('#parent').on('change', function(){ $('#child').html(noValue); var cat = $(this).val(); if(cat){ var item = team[cat]; for(var i = 0; i < item.length; i++){ option = '<option value="' + item[i] + '">' + item[i] + '</option>'; $('#child').append(option); } } }); }); function init() { if ($('#parent option[selected=selected]').attr('selected')) { $('#parent').val($('#parent option[selected=selected]').val()); } else { $('#parent option:first').prop('selected', 'selected'); } } jQuery(function () { init(); $(window).on('pageshow', init); }); </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noka_blank

2019/02/24 23:52

ページ遷移でデータを引き継ぐ場合は、cookieやセッション等が必要と思います。 おそらく現在もサーバサイドでそのような処理をしていると思いますので、formのactionで実行されるスクリプトを掲示していただければ、回答を得やすいと思います。
m.ts10806

2019/02/25 00:33

コードはマークダウンのcode機能を利用してご提示ください。
guest

回答2

0

ベストアンサー

webstorage(今回はsessionstorage)を使ってみては!

■ 検証環境 ■
Win10
Chrome72
jsfiddle
jQuery3.3.1

jQuery

1jQuery(function($){ 2 3team = { 4A1:[ 5'巨人', 6'ヤクルト', 7'広島', 8'横浜', 9'中日', 10'阪神', 11], 12A2:[ 13'ヴェルディ', 14'マリノス', 15'サンフレッチェ', 16'レッズ', 17'ベルマーレ', 18], 19}; 20 21var noValue = $('#child').html(); 22storage = sessionStorage; 23 24fnTeamName = function(SportsName,callback){ 25 var item = team[SportsName]; 26 for(var i = 0; i < item.length; i++){ 27 option = '<option value="' + item[i] + '">' + item[i] + '</option>'; 28 $('#child').append(option); 29 } 30 callback(); 31} 32 33//フォーム選択による動作 34$('#parent').on('change', function(){ 35 var sportsName = $(this).val(); 36 storage.setItem('sportsName', sportsName); 37 38$('#child').html(noValue); 39 var cat = $(this).val(); 40 if(cat){ 41 fnTeamName(cat,function(){}); 42 } 43}); 44 45$('#child').on('change', function(){ 46 var teamName = $(this).val(); 47 storage.setItem('teamName', teamName); 48}); 49}); 50 51function init() { 52 if ($('#parent option[selected=selected]').attr('selected')) { 53 $('#parent').val($('#parent option[selected=selected]').val()); 54 } 55 else { 56 if(storage.getItem('sportsName')){ 57 var getSportsName = storage.getItem('sportsName'); 58 var getTeamName = storage.getItem('teamName'); 59 $("#parent").val(getSportsName); 60 fnTeamName(getSportsName,function(){ 61 $("#child").val(getTeamName); 62 }); 63 }else{ 64 $('#parent option:first').prop('selected', 'selected'); 65 } 66 } 67} 68 69jQuery(function () { 70 init(); 71 $(window).on('pageshow', init); 72});

投稿2019/02/25 08:24

Yousuck

総合スコア349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yooashleaf

2019/02/26 01:52

sessionstorageは前から興味はあったのですが、今回みたいな時に使うのですね! 早速実装してみました!うまく動作しております!本当に助かりました!
guest

0

クッキーを使うと良いでしょう
(動作確認のためサーバー側にphpを指定してあります)

javascrpt

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 3<script> 4$(function(){ 5 var team = { 6 "":[], 7 "A1":['巨人','ヤクルト','広島','横浜','中日','阪神',], 8 "A2":['ヴェルディ','マリノス','サンフレッチェ','レッズ','ベルマーレ',], 9 }; 10 if(typeof $.cookie('parent')=="undefined") $.cookie('parent',0); 11 if(typeof $.cookie('child')=="undefined") $.cookie('child',0); 12 $('#parent').prop('selectedIndex',$.cookie('parent')).on('change', function(){ 13 var cat = $(this).val(); 14 var item = team[cat]; 15 $('#child option:gt(0)').remove(); 16 $.each(item,function(x,y){ 17 $('#child').append($('<option>').val(y).text(y)); 18 }); 19 }).trigger('change'); 20 $('#child').prop('selectedIndex',$.cookie('child')); 21 $('#form1').on('submit',function(){ 22 $.cookie('parent',$('#parent').prop('selectedIndex')); 23 $.cookie('child',$('#child').prop('selectedIndex')); 24 }); 25}); 26 27 28</script> 29<form method="post" action="send.php" id="form1"> 30 31<h1>1.好きなスポーツを指定してください。</h1> 32<select name="sports" id="parent"> 33<option value="">選択して下さい</option> 34<option value="A1">野球</option> 35<option value="A2">サッカー</option> 36</select> 37 38<h1>2.好きなチームを指定してください。</h1> 39※先に質問1を指定してください<br> 40<select name="team" id="child"> 41<option value="">選択して下さい</option> 42</select> 43 44<input type="submit" value="送信"> 45</form>
  • send.php

php

1<?PHP 2print_r($_POST); 3print "<hr>"; 4print_r($_COOKIE); 5print "<hr>"; 6?> 7<input type="button" onclick="history.back()" value="back">

投稿2019/02/25 01:10

編集2019/02/25 01:10
yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yooashleaf

2019/02/26 01:51

PHPまでありがとうございます! 今回は大変恐縮ですが、他の回答者様をベストアンサーに選ばせて頂きますが、クッキーの方法も後学の為、試してみたいと思います!本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問