我正在创建一个下拉选项,其中每个子选择,查询结果来自前一个。在我发现一个类似的帖子之后,我搜索并形成了我的作品,不幸的是,我仍然无法让它工作。任何帮助都是极好的。谢谢。
我使用select作为下拉列表,id = level1,level2,level3等。
这是我的代码的html下拉列表选择部分
Enter Auction Category : <input type="text" name="fcv" id="fcv" /> <br>
or Select Category : <br>
<select class="sspecial" name="level1" id="level1" onchange="getDropdownOptions()">
<option></option>
<?
$level1_sql="SELECT * FROM Ebay_Category WHERE Level = '1' ORDER BY Category";
$level1_results=mysql_query($level1_sql);
while($level1=mysql_fetch_array($level1_results)) {
if ($level1['Leaf']) {
echo "<option value='".$level1['ebay_category_id']."'>".$level1['Category']."</option>";
} else {
echo "<option value=''>".$level1['Category']."</option>";
}
}
?>
</select>
<br><br>
<select class="sspecial" name="level2" id="level2">
<option value=''></option>
</select>
用户只能看到为level1填充的下拉列表。然后他们从中进行选择 - 此时,我希望level2能够填充基于1级选择的查询。
这是我依赖的javascript
<script type="text/javascript">
$(document).ready(function() {
$('#level1').change(getDropdownOptions);
});
function getDropdownOptions() {
var val = $(this).val();
// fire a POST request to populate_L2.php
$.post('populate_L2.php', { value : val }, populateDropdown, 'html');
}
function populateDropdown(data) {
if (data != 'error') {
$('#level2').html(data);
}
}
</script>
我将使用6个等级或选择。
我不太了解javascript,看看它是如何实际填充下一个选项列表的 - 这意味着,我确信我已经遗漏了一些东西。
通过上面的菜单,菜单从原始查询中提取父项, 但在变化时,随后的任何事都没有发生。
提前感谢您提供任何方向或帮助。
再次感谢你。
编辑:显示我的populate_L2.php代码
mysql_connect("$servername", "$dbusername", "$dbpassword")or die("cannot connect");
mysql_select_db("$dbname")or die("cannot select DB");
$parentid=$_GET['value'];
$postSQL="select * Ebay_Category where Level='2' and ParentID=$parentid";
$postSelect=mysql_query($postSQL);
$html = "<option>--select--</option>";
while ($row = mysql_fetch_array($postSelect))
{
if($row['Leaf']!=0){
$html .= "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
} else {
$html .= "<option value=''>".$row['Category']."</option>";
}
}
关于安置的一个词。我在文档的头部有javascript。我有其他脚本在那里完美地工作 - 这个脚本是最后一个加载在head部分的脚本。
因为我发布了这个 - 我验证了我的表名,我的字段名称,然后输入一个echo来告诉我populate_L2.php是否被移交任何焦点 - 它不是。
已编辑
我刚刚发出警报('getDropdownOptions已被执行'); getDropdownOptions()函数内部的行 - 当我更改下拉列表的值时 - 没有任何更改,也没有警报....
再次感谢您的任何建议。
解决了,有点 - 使用jquery。现在我需要打开一个我认为的新问题,因为从技术上讲,它解决了我原来的问题。
要做下拉列表,最多3个成功执行以下操作;
在标题中创建了一个脚本;
<script type="text/javascript">
function getInfo(str)
{
if (str=="")
{
document.getElementById("catTitle").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("catTitle").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","cat_title.php?q="+str,true);
xmlhttp.send();
}
</script>
然后在同一份文件中,
我使用onchange ='getInfo(this.value)'调用创建了我的第一个select 我在同一份文件中添加了 标识为catTitle的span标记 (也为每个附加选择重复它)
然后,我在脚本中调用了cat_title.php文件,
$vx=$_GET["q"];
$SQL="SELECT * FROM Ebay_Category WHERE ParentID='".$vx."' ORDER BY Category";
$result=mysql_query($SQL);
echo "<select id='lev3' onchange='getInfo2(this.value)'>";
while ($row=mysql_fetch_array($result)){
echo "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
}
echo "</select>";
将echo发送到表单而不重新加载,并为我创建一个新的选择框以选择下一个选项。
这允许我使用1级选择值树下来显示2的选项,然后选择选项2,使用该值显示第3组选项 - 这是我个人有问题的地方,因为我不能去任何进一步
xmlhttp.status = 500,在第一个2之外的所有呼叫上。我希望找到一种方法来重置 - 如果你还需要一个更深层次的解决方案,请检查我的问题 - 因为我将要求特别为该部分提供更强大的Stack Overflow支持。