我正在创建一个下拉选择,其中每个子选择都使用前一个结果进行查询。在我发现一个类似的帖子之后,我已经搜索并形成了我的作品,不幸的是,我仍然无法让它工作。任何帮助都是极好的。谢谢你。
我在下拉菜单中使用 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岁的孩子
- 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 之后的所有调用中。我希望找到一种方法来重置它 - 如果您还需要更深入的解决方案,请检查我的问题 - 因为我要要求更棒的堆栈专门针对该部分的溢出支持。