<script language="JavaScript"> <!-- var subcat = new Array(); <? $i=0; $sql="select * from sanji "; $query=mysql_query($sql,$link); while($arr=mysql_fetch_array($query)) { echo "subcat[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n"; } ?> var subcat2 = new Array(); <? $i=0; $sql="select * from sanji "; $query=mysql_query($sql,$link); while($arr=mysql_fetch_array($query)) { echo "subcat2[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n"; } ?> function changeselect1(locationid) { document.form1.s2.length = 0; document.form1.s2.options[0] = new Option('==请选择==',''); for (i=0; i<subcat.length; i++) { if (subcat[i][0] == locationid) {document.form1.s2.options[document.form1.s2.length] = new Option(subcat[i][2], subcat[i][2]);} } } function changeselect2(locationid) { document.form1.s3.length = 0; document.form1.s3.options[0] = new Option('==请选择==',''); for (i=0; i<subcat2.length; i++) { if (subcat2[i][1] == locationid) {document.form1.s3.options[document.form1.s3.length] = new Option(subcat2[i][3], subcat2[i][3]);} } } //--> </script> 三级联动:<BR> <form name="form1"> <select name="s1" onChange="changeselect1(this.value)"> <option>==请选择==</option> <? $sql="select distinct A from sanji"; $query=mysql_query($sql,$link); while($arr=mysql_fetch_array($query)) { echo "<option value=".$arr["A"].">".$arr["A"]."</option>\n"; } ?> </select> <select name="s2" onChange="changeselect2(this.value)"> <option>==请选择==</option> </select> <select name="s3" onChange="alert('选选择'+this.value)"> <option>==请选择==</option> </select> </form> <BR> </body> </html>
if (subcat[i][0] == locationid)这句应该是判断数组中的数据是否与当前选择的数据一致的吧 主要是我的数据库的格式是上面所显示的哪样的 还有我改了找下一级的规则,但是在点选第一级后,第二级应该会变的吧,就算它找不到第二级的东西,可现在点选第一级后,第二级一点也不变,就好像是<select name="s1" onChange="changeselect1(this.value)">中的onChange没有起作用一样
只需要输出subcat一个JS数组就可以了。整个代码的逻辑并没有问题。 但这个JS代码就有问题了,不兼容。JS里: for (i=0; i<subcat.length; i++) 相对于 var subcat_len=subcat.length; for (i=0; i<subcat_len; i++) 的执行效率,在数据叫多的时候,尤其慢
<!--
var subcat = new Array();
<?
$i=0;
$sql="select * from sanji ";
$query=mysql_query($sql,$link);
while($arr=mysql_fetch_array($query))
{
echo "subcat[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n";
}
?>
var subcat2 = new Array();
<?
$i=0;
$sql="select * from sanji ";
$query=mysql_query($sql,$link);
while($arr=mysql_fetch_array($query))
{
echo "subcat2[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n";
}
?>
function changeselect1(locationid)
{
document.form1.s2.length = 0;
document.form1.s2.options[0] = new Option('==请选择==','');
for (i=0; i<subcat.length; i++)
{
if (subcat[i][0] == locationid)
{document.form1.s2.options[document.form1.s2.length] = new Option(subcat[i][2], subcat[i][2]);}
}
}
function changeselect2(locationid)
{
document.form1.s3.length = 0;
document.form1.s3.options[0] = new Option('==请选择==','');
for (i=0; i<subcat2.length; i++)
{
if (subcat2[i][1] == locationid)
{document.form1.s3.options[document.form1.s3.length] = new Option(subcat2[i][3], subcat2[i][3]);}
}
}
//-->
</script>
三级联动:<BR>
<form name="form1">
<select name="s1" onChange="changeselect1(this.value)">
<option>==请选择==</option>
<?
$sql="select distinct A from sanji";
$query=mysql_query($sql,$link);
while($arr=mysql_fetch_array($query))
{
echo "<option value=".$arr["A"].">".$arr["A"]."</option>\n";
}
?>
</select>
<select name="s2" onChange="changeselect2(this.value)">
<option>==请选择==</option>
</select>
<select name="s3" onChange="alert('选选择'+this.value)">
<option>==请选择==</option>
</select>
</form>
<BR>
</body>
</html>
主要是我的数据库的格式是上面所显示的哪样的
还有我改了找下一级的规则,但是在点选第一级后,第二级应该会变的吧,就算它找不到第二级的东西,可现在点选第一级后,第二级一点也不变,就好像是<select name="s1" onChange="changeselect1(this.value)">中的onChange没有起作用一样
但这个JS代码就有问题了,不兼容。JS里:
for (i=0; i<subcat.length; i++)
相对于
var subcat_len=subcat.length;
for (i=0; i<subcat_len; i++)
的执行效率,在数据叫多的时候,尤其慢