<script language="JavaScript" type="text/javascript">
//ChangeSelect(上一级的值,下一级Select控件的ID值,下一级Select控件要选中的值(即value而非text),数据源数组名,默认显示字符(如:请选择...如果不写的话会用默认值填充)),第一级的上级值为0
function ChangeSelect(ParentValue, NextId, NextSelectedValue, ArrObj,DefaultStr)
{
StrObj = eval(document.getElementById(NextId));
StrObj.length = 0;
//判断它是二级数据源,还是三级if (ArrObj.length > 0)
{
if (ArrObj[0].length == 2)
{ArrNum = 0;}
else
{ArrNum = 2;}
}
//显示所有列表
for (i = 0; i < ArrObj.length; i++)
{
if (i == 0)
{
if (DefaultStr == undefined ) DefaultStr="==请选择==";
StrObj.options[StrObj.length] = new Option(DefaultStr, "");
}if (ArrObj[i][1] == ParentValue)
{
StrObj.options[StrObj.length] = new Option(ArrObj[i][0],ArrObj[i][2]);}
}
//选中列表内某一项
for (i = 0; i < StrObj.length; i++)
{
if (StrObj.options[i].value == NextSelectedValue)
{
StrObj.options[i].selected = true;
}
}
//激发下一级的onchange事件以实现多级级联
StrObj.onchange();
}
//公司二维数组数据源
//有时候,写的显示格式不一样,效果就不一样,同样的循环数据,不同的表现形式,结果就不一样。
Office = [
["CategoryName","ParentCategoryName"],
["北京","0","1"],
["河北省","0","2"],
["丰台","1","3"],
["朝阳","1","4"],
["邯郸","2","5"],
["峰峰","2","6"],
]
</script>
<select name="first" id="office1"  onchange="ChangeSelect(this.value,'office2','',Office,'==城市==')" style="width:100px"></select>
<select name="second" id="office2" onchange="" style="width:100px"></select>
<script language="JavaScript" type="text/javascript">ChangeSelect('0','office1','',Office,'==省市==') </script>

解决方案 »

  1.   

    你应该帖出有问题的数据,因为你说“有时候,写的显示格式不一样,效果就不一样,同样的循环数据,不同的表现形式,结果就不一样。”
    虽然这不是 php 的问题,但提问的方法都是一样的
      

  2.   


    <script language="JavaScript" type="text/javascript">
    //ChangeSelect(上一级的值,下一级Select控件的ID值,下一级Select控件要选中的值(即value而非text),数据源数组名,默认显示字符(如:请选择...如果不写的话会用默认值填充)),第一级的上级值为0
    function ChangeSelect(ParentValue, NextId, NextSelectedValue, ArrObj,DefaultStr)
    {
    StrObj = eval(document.getElementById(NextId));
    StrObj.length = 0;
    //判断它是二级数据源,还是三级if (ArrObj.length > 0)
    {
    if (ArrObj[0].length == 2)
    {ArrNum = 0;}
    else
    {ArrNum = 2;}
    }
    //显示所有列表
    for (i = 0; i < ArrObj.length; i++)
    {
    if (i == 0)
    {
    if (DefaultStr == 'undefined' ) DefaultStr="==请选择==";
    StrObj.options[StrObj.length] = new Option(DefaultStr, "");
    }if (typeof(ArrObj[i]) != 'undefined' && ArrObj[i][1] == ParentValue)
    {
    StrObj.options[StrObj.length] = new Option(ArrObj[i][0],ArrObj[i][2]);}
    }
    //选中列表内某一项
    for (i = 0; i < StrObj.length; i++)
    {
    if (StrObj.options[i].value == NextSelectedValue)
    {
    StrObj.options[i].selected = true;
    }
    }
    //激发下一级的onchange事件以实现多级级联
    StrObj.onchange();
    }
    //公司二维数组数据源
    //有时候,写的显示格式不一样,效果就不一样,同样的循环数据,不同的表现形式,结果就不一样。
    Office = [
    ["CategoryName","ParentCategoryName"],
    ["北京","0","1"],
    ["河北省","0","2"],
    ["丰台","1","3"],
    ["朝阳","1","4"],
    ["邯郸","2","5"],
    ["峰峰","2","6"],
    ]
    </script>
    <select name="first" id="office1" onchange="ChangeSelect(this.value,'office2','',Office,'==城市==')" style="width:100px"></select>
    <select name="second" id="office2" onchange="" style="width:100px"></select>
    <script language="JavaScript" type="text/javascript">ChangeSelect('0','office1','',Office,'==省市==') </script>
    试试吧!
      

  3.   

    哇塞    che253604783   你太棒啦    真的可以了啊  哈哈   if (typeof(ArrObj[i]) != 'undefined' && ArrObj[i][1] == ParentValue)  为什么非要加上这个 typeof(ArrObj[i]) != 'undefined' 验证呢?加上这个了IE就可以识别了么?
      

  4.   

    还有  我从哪儿给分呢?   我这是刚使用csdn   有很多都不了解  但是你解决了我的问题  我真的是太高兴啦     哈哈
      

  5.   

    那个 undefined 是 ["峰峰","2","6"], 后面的“,”造成的。都了一个空元素
    难道 非ie就不计空元素吗?
    再说在我的ie7中也没有出现问题呀