У меня есть три выпадающих меню, первые две работы прекрасные, третий дает мне ту же головную боль. По какой-то причине после изменения значений второго выпадающего значения оно утрачивает значение первого меню. Вот код:
<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?
Любая помощь приветствуется
В файле 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>