Заполнение третьего меню на основе предыдущих значений выпадающего списка

У меня есть три выпадающих меню, первые две работы прекрасные, третий дает мне ту же головную боль. По какой-то причине после изменения значений второго выпадающего значения оно утрачивает значение первого меню. Вот код:

<script language="javascript" type="text/javascript"> function getXMLHTTP() { //function to return the xml http object var xmlhttp=false; try{xmlhttp=new XMLHttpRequest(); } catch(e){try{ xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e1){ xmlhttp=false; }}} return xmlhttp; } function getColor(CategoryId) { var strURL="getColor.php?Category="+CategoryId; var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) { // only if "OK" if (req.status == 200) { document.getElementById('qcolor').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } } 

До сих пор все кажется, что все работает, что-то не так, но не уверен, что:

 function getBrand(CategoryId,ColorId) { var strURL="getBrand.php?Category="+CategoryId+"&Color="+ColorId; var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) { // only if "OK" if (req.status == 200) { document.getElementById('qbrand').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } } 

Код HTML:

  </head> <body> <div id="Quick_find_2"> <div id="Quick_find_container"> <form action="search2.php" method="get"> <div id="qcategory_1">Product</div> <div id="qcategory"> <select name="Category" class="dropmenu" id="Category" onChange="getColor(this.value)"> <option value="">Any</option> <option value="Keyboard"<?php if ($_GET['Category']=="Keyboard") {echo "selected='selected'"; } ?>>Keyboard</option> <option value="Piano"<?php if ($_GET['Category']=="Piano") {echo "selected='selected'"; } ?>>Piano</option> </select> </div> <div id="qcolor_1">Colour</div> <div id="qcolor"><select name="Color" id="Color" class="dropmenu"> <option value="">Select Color</option> </select> </div> <div id="qbrand_1">Brand</div> <div id="qbrand"><select name="Manufacturer" class="dropmenu"> <option value="">Any</option> </select> </div> 

GetColor.php

 <? $Category= $_GET['Category']; mysql_select_db($database_dconn, $dconn); $query="SELECT DISTINCT Color FROM products WHERE products.Category LIKE '%$Category%' AND Category!= 'Stage Pianos' AND Category!= 'Recent Pianos' AND Category!= 'Recent Keyboards' AND hidden ='no' ORDER BY Color"; $result=mysql_query($query); ?> <select name="Color" onChange="getBrand(this.value)"> <?php echo '<option value="">Any</option>'; while ($Color = mysql_fetch_array($result)) { $selected2 = $_GET['Color'] == $Color['Color'] ? 'selected' : ''; echo '<option '.$selected2.'>' . $Color['Color'] . '</option>'; } ?> </select> 

Вот getBrand.php

 <? $Category= $_GET['Category']; $Color=$_GET['Color']; mysql_select_db($database_dconn, $dconn); $query="SELECT DISTINCT Manufacturer FROM products WHERE products.Category LIKE '%$Category%' AND Color = '$Color' AND Category!= 'Stage Pianos' AND Category!= 'Recent Pianos' AND Category!= 'Recent Keyboards' AND hidden ='no' ORDER BY Manufacturer"; $result=mysql_query($query); ?> <select name="Manufacturer"> <option value="">Select Brand</option> <? while($row=mysql_fetch_array($result)) { ?> <option value=<?=$row['Manufacturer']?>><?=$row['Manufacturer']?></option> <? } ?> </select> 

Это приводит к правильному цвету, однако после его изменения на выбранное значение не будет отражать значение категории или, по крайней мере, когда я пытаюсь попасть в файл getBrand, он не может быть найден, есть способ отправить это значение категории как хорошо для файла getBrand?

Любая помощь приветствуется

Related of "Заполнение третьего меню на основе предыдущих значений выпадающего списка"

В файле getColor.php:

A: вы не передаете атрибут value в теге параметра.

B: В функции getBrand вы получаете две переменные; один является CategoryId а другой – ColorId , но в функции Onchange в поле выбора бренда вы передаете только одно значение, THIS.VALUE .

Отредактированный код:

 <? $Category= $_GET['Category']; mysql_select_db($database_dconn, $dconn); $query="SELECT DISTINCT Color FROM products WHERE products.Category LIKE '%$Category%' AND Category!= 'Stage Pianos' AND Category!= 'Recent Pianos' AND Category!= 'Recent Keyboards' AND hidden ='no' ORDER BY Color"; $result=mysql_query($query); ?> <select name="Color" onChange="getBrand('<?php echo $Category; ?>',this.value)"> <?php echo '<option value="">Any</option>'; while ($Color = mysql_fetch_array($result)) { $selected2 = $_GET['Color'] == $Color['Color'] ? 'selected' : ''; echo '<option '.$selected2.' value="'.$Color['Color'].'">' . $Color['Color'] . '</option>'; } ?> </select>