まず、簡単なソースを2つ載せます。
PHP
1<?php 2$a_array = array("1", "2", "3"); 3$a_word = isset($_POST['a_select']) ? $_POST['a_select'] : ''; 4?> 5<!DOCTYPE html> 6<html lang=ja> 7<head> 8<meta charset='utf-8'> 9<title>Select Test</title> 10</head> 11<body> 12 <form name="main" action="" method="post"> 13 <label>A:</label> 14 <select name="a_select"> 15 <?php 16 for($i = 0; $i < count($a_array); $i ++){ 17 echo "<option value="; 18 echo "\"$a_array[$i]\""; 19 if($a_array[$i] === $a_word){ 20 echo " selected"; 21 } 22 echo ">$a_array[$i]"; 23 } 24 ?> 25 </select> 26 <label>B:</label> 27 <select name="b_select"> 28 </select> 29 <input type="submit" value="search"> 30 </form> 31 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.j\ 32s"></script> 33 <script> 34 $(function(){ 35 $('[name=a_select]').change(function() { 36 // 選択されているvalue属性値を取り出す 37 var obj ={}; 38 obj['a'] = $('[name=a_select]').val(); 39 40 $.get('b.php', obj, function(data) { 41 console.log(data); 42 var result = data.split(','); 43 44 // b_selectの選択肢を空にする 45 $('[name=b_select]').empty(); 46 47 // b_selectの選択肢に加える 48 $option = $('<option>') 49 .val(data) 50 .text(data); 51 $('[name=b_select]').append($option); 52 }); 53 }); 54 }); 55 </script> 56</body> 57</html> 58
上のソースの「b.php」です。
PHP
1<?php 2$a = $_GET['a']; 3 4$b = $a . $a . $a; 5echo $b; 6?>
最初のPHPを動かすと、AとB2つのセレクタが現れます。Aの方を選択すると、JavaScriptによってb.phpを呼びに行き、Bの方のセレクタの値が設定されます。(b.phpは簡単化していますが、実際のコードではサーバ側でデータベースにアクセスするという処理をしています。)
ここでsubmitをすると、Aの方はselectされた値がそのまま残るのですが、当然Bの方は値がなくなってしまいます。これをAと同じように元の値を残すことはできないでしょうか?A, Bの値を使って、データベースを検索するプログラムを作っており、検索後に値がなくなってしまうと、使い勝手が非常に悪いと考えています。
処理の順番の問題で、JaveScriptで作り出した値をPHPに渡すことはできないようなのでこのままの構成では難しいのかもしれませんが、実現できる構成があれば教えていただきたいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/06 01:14