0

我正在创建一个下拉选择,其中每个子选择都使用前一个结果进行查询。在我发现一个类似的帖子之后,我已经搜索并形成了我的作品,不幸的是,我仍然无法让它工作。任何帮助都是极好的。谢谢你。

我在下拉菜单中使用 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 个级别或选择。

  1. 父母
  2. 1 岁的孩子
  3. 2岁的孩子
  4. 3岁的孩子等等

我对 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 部分的脚本。

因为我已经发布了这个 - 我验证了我的表名,我的字段名,并输入了一个回声,让我知道 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)' 调用创建了我的第一个选择我在同一个文档中添加了一个带有 catTitle id 的 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>";

回声无需重新加载即可发送到表单,并创建一个新的选择框供我选择下一个选项。

这允许我使用级别 1 选择值来显示 2 的选项,然后选择选项 2,使用该值显示第三组选项 - 这是我个人遇到问题的地方,因为我不能再进一步了。

xmlhttp.status = 500,在第一个 2 之后的所有调用中。我希望找到一种方法来重置它 - 如果您还需要更深入的解决方案,请检查我的问题 - 因为我要要求更棒的堆栈专门针对该部分的溢出支持。

4

1 回答 1

1

Chained Selects jQuery 插件可以满足您的需求。

于 2012-10-18T17:05:35.320 回答