要结合前台script实现(如javascript)
首先捕捉第一下拉框的onChange事件,如果你已经知道省名对应的市名,可以直接用javascript修改第二下拉框的选项,如果你的数据存在数据库,则在onChange事件中要递交网页并把省名作为参数,查询获得相应市名后重新生成网页
首先捕捉第一下拉框的onChange事件,如果你已经知道省名对应的市名,可以直接用javascript修改第二下拉框的选项,如果你的数据存在数据库,则在onChange事件中要递交网页并把省名作为参数,查询获得相应市名后重新生成网页
<option> 黑龙江
<option> 广东
<option> 日本
</select>
<select id=oSel2>
</select><script>//二维数据表格(二维数组)
var Table2dim = new Array(
new Array("哈尔滨", "齐齐哈尔", "牡丹江"),
new Array("广州", "深圳", "佛山"),
new Array("广岛", "长崎"),
null
);//Chg() 和 ChgOptions(i) 都是通用的,只要修改上面的 oSel1 的选项和 Table2dim 的内容即可
function Chg()
{
ChgOptions(document.all.oSel1.selectedIndex);
}
function ChgOptions(iSel1)
{
if ( 0 <= iSel1 && iSel1 < Table2dim.length )
{
var oSel2 = document.all.oSel2, i; //删除所有旧选项(不知道有没有不用循环的删除办法)
for ( i = oSel2.options.length; -- i >= 0; )
oSel2.options.remove(i); //创建新关联选项
var Table1dim = Table2dim[iSel1];
for ( i = 0; i < Table1dim.length; i ++ )
{
var o = document.createElement('<option>');
o.text = Table1dim[i];
oSel2.options.add(o);
}
}
}//初始化
ChgOptions(0);
</script>PHP 所要做的最多是从数据库中取得数据,生成上面的 oSel1 和 Table2dim
function aClass(aData, aValue, aText) {
if (aClass.arguments.length < 3)
alert("´«ÈëµÄ²ÎÊý´íÎó£¡")
else {
this.Data = aData; //²úÉúµÄ½«ÊǵÚÒ»¸öÏÂÀ­¿òµÄvalue
this.Value = aValue; //²úÉúµÚ¶þ¸ö¿òµÄvalueÖµ
this.Text = aText; //²úÉúµÚ¶þ¸ö¿òµÄtextÄÚÈÝ
}
}
//¸Ãº¯ÊýÓÃÓڵõ½µÚÒ»¸öÏÂÀ­¿ò±»Ñ¡ÖжÔÏóµÄvalueÖµ
//£¨aSrc=µÚÒ»¸öÏÂÀ­¿ò¶ÔÏó£»aDes=µÚ¶þ¸öÏÂÀ­¿ò¶ÔÏó£»aClassÓÃÉÏÃ溯Êý²úÉúµÄÊý×飻£©
function chgDnCombobox(aSrc, aDes, aClass, aRemain){
if (chgDnCombobox.arguments.length < 3)
alert("´«ÈëµÄ²ÎÊý´íÎó£¡")
else if (aSrc.type != "select-one") //ÅжÏÏÂÀ­¿òÊDz»Êǵ¥Ñ¡¿ò
alert("´«ÈëµÄ²ÎÊý´íÎó£¡")
else if (aClass == null)
alert("aClass䶨Òå´íÎó£¡")
else {
if (aRemain==null)
aRemain = 1;
chgDnComboboxItem(aSrc.options[aSrc.selectedIndex].value, aDes, aClass, aRemain);
}
} function chgDnComboboxItem(aValue, aDes, aClass, aRemain){
if (chgDnComboboxItem.arguments.length<3)
alert("²ÎÊý´«Èë´íÎó£¡")
else if (aClass==null)
alert("´íÎó£¡aClassûÓж¨Ò壡")
else{
if (aRemain==null)
aRemain = 1;
deleteAllComboboxItem(aDes, aRemain); //ɾ³ýµÚ¶þ¸öÏÂÀ­¿òµÄËùÓÐoption¶ÔÏó
for (var i=0; i<aClass.length; i++)
if (aClass[i].Data==aValue) /* check aClass[i].Data */
if (aClass[i].Data!="")
addComboboxItem(aDes, aClass[i].Text, aClass[i].Value);//Éú³ÉµÚ¶þ¸öÏÂÀ­¿òµÄoption¶ÔÏó
}
}
//ɾ³ýµÚ¶þ¸öÏÂÀ­¿òµÄËùÓÐoption¶ÔÏó
function deleteAllComboboxItem(aList, aRemain) {
for (var i=aList.options.length; i > aRemain; i--)
aList.options[i] = null;
}
//Éú³ÉµÚ¶þ¸öÏÂÀ­¿òµÄoption¶ÔÏó
function addComboboxItem(aList, aText, aValue) {
var aOption = new Option(aText, aValue);
aList.options[aList.options.length]=aOption; }
///¸ù¾Ý¹ú¼Ò¸Ä±äÊ¡ÖÝ
var f_Set0 = new Array(
<?php
for($i=0;$i<$stateRow;$i++)
{
echo "new aClass('".$state->result[$i][country]."', '".$state->result[$i][state]."', '".$state->result[$i][state]."'),";
}
echo "new aClass('".$state->result[$i][country]."', '".$state->result[$i][state]."', '".$state->result[$i][state]."')"
?>
);
function change_area(aForm) {
chgDnCombobox(aForm.country, aForm.state, f_Set0 , 0)
}onChange="change_area(document.dataform)"