<SCRIPT LANGUAGE="JavaScript"> 
function Dsy() 

this.Items = {}; 

Dsy.prototype.add = function(id,iArray) 

this.Items[id] = iArray; 

Dsy.prototype.Exists = function(id) 

if(typeof(this.Items[id]) == "undefined") return false; 
return true; 

function change(v){ 
var str="0"; 
for(i=0;i<v;i++){ 
str+=("_"+(document.getElementById(s[i]).selectedIndex-1));
}; 
var ss=document.getElementById(s[v]); 
with(ss){ 
length = 0;
if(v != 3){
options[0]=new Option(opt0[v],opt0[v]); 
if(v && document.getElementById(s[v-1]).selectedIndex>0 || !v) 

if(dsy.Exists(str)){ 
ar = dsy.Items[str]; 
for(i=0;i<ar.length;i++)options[length]=new Option(ar[i],ar[i]); 
if(v)options[1].selected = true; 


}else{
var strcheckbox = "";
if(dsy.Exists(str)){ 
ar = dsy.Items[str]; 
for(i=0;i<ar.length;i++){
strcheckbox += "<input type='checkbox' name='s41[]'  value='"+ ar[i ]+"' />" +ar[i] +"&nbsp;&nbsp;";
}
}
 $("#s4").html(strcheckbox);
}
if(++v<s.length){
change(v);


} var s=["s1","s2","s3","s4"]; 
var opt0 = ["请选择","请选择","请选择","请选择"]; 
function setup() 

for(i=0;i<s.length-1;i++) 
document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")"); 
change(0); 
} var dsy = new Dsy(); 
dsy.add("0",["器件","应用"]); 
dsy.add("0_0",["处理器","嵌入式系统","可编程逻辑","系统级芯片","存储器","模拟电路","数字电路 ","电源管理","显示技术 ","传感器 ","光电/显示","分立器件","无源元件","其他"]);
dsy.add("0_0_0",["CPU","DSP+MCU","处理器核 ","DSC","多核处理器"]); 
dsy.add("0_0_0_0",["cpu主板","cpu核","cpu频率","虚拟cpu","cpu芯片","cpu主频","cpu监控","inter cpu"]);
dsy.add("0_0_0_1",["dsp mcu","dsp单片机","mcu usb","嵌入式技术","mcu应用","嵌入系统","dsp解码","mcu 视频","dsp应用","信号处理"]);
dsy.add("0_0_0_2",["英特尔处理器","笔记本处理器","cpu处理器","四核cpu","电脑处理器","arm处理器","英特尔四核","i7处理器","手机处理器","多核处理器"]);
dsy.add("0_0_0_3",["dsc","dsc 相机5,400 4,400","dsc-tx9c  1,300 1,000","dsc-t99c  390 320","dsc-hx5c  390 320","dsc曲线  1,000 260","dsc-t99dc  260 210","dsc-wx5c  260 210","dsc-tx7c  210 170","dsc-j10 "]);
dsy.add("0_0_0_4",["多核处理器","多核处理器技术","嵌入式多核处理器","多核网络处理器","intel多核处理器","多核处理器体系结构"]);
</scritp></head> 
<body onload="setup()"> 
<form name="frm" id="frm"  enctype="multipart/form-data" method="post" action="diqu.sub.php" > 
<select name="s1" id="s1"><option>请选择</option></select> 
<select name="s2" id="s2"><option>请选择</option></select> 
<select name="s3" id="s3"><option>请选择</option></select>
<div style="width:400px;">
<span id="s4">12</span>
</div>
<input name="button" type="submit" class="nnt_submit" id="button" value="测   试" />
</form> </body> 
</html>
<script language="JavaScript" src="jquery.js" type="text/javascript"></script>
还引入的jquery,代码在火狐下没问题,在ie下只显示前三级,无法显示第四级。我的选择地四级的值

解决方案 »

  1.   

    把你的with改掉试试吧JSLint不支持使用with
      

  2.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="ec/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            function Dsy() {
                this.Items = {};
            }
            Dsy.prototype.add = function (id, iArray) {
                this.Items[id] = iArray;
            }
            Dsy.prototype.Exists = function (id) {
                if (typeof (this.Items[id]) == "undefined") return false;
                return true;
            }
            function change(v) {
                var str = "0";
                for (i = 0; i < v; i++) {
                    str += ("_" + (document.getElementById(s[i]).selectedIndex - 1));
                };
                var ss = document.getElementById(s[v]);
                with (ss) {
                    var length = 0;
                    if (v != 3) {
                        options[0] = new Option(opt0[v], opt0[v]);
                        if (v && document.getElementById(s[v - 1]).selectedIndex > 0 || !v) {
                            if (dsy.Exists(str)) {
                                ar = dsy.Items[str];
                                for (i = 0; i < ar.length; i++) options[length] = new Option(ar[i], ar[i]);
                                if (v) options[1].selected = true;
                            }
                        }
                    } else {
                        var strcheckbox = "";
                        if (dsy.Exists(str)) {
                            ar = dsy.Items[str];
                            for (i = 0; i < ar.length; i++) {
                                strcheckbox += "<input type='checkbox' name='s41[]' value='" + ar[i] + "' />" + ar[i] + "&nbsp;&nbsp;";
                            }
                        }
                        $("#s4").html(strcheckbox);
                    }
                    if (++v < s.length) {
                        change(v);
                    }
                }
            }        var s = ["s1", "s2", "s3", "s4"];
            var opt0 = ["请选择", "请选择", "请选择", "请选择"];
            function setup() {
                for (i = 0; i < s.length - 1; i++)
                    document.getElementById(s[i]).onchange = new Function("change(" + (i + 1) + ")");
                change(0);
            }        var dsy = new Dsy();
            dsy.add("0", ["器件", "应用"]);
            dsy.add("0_0", ["处理器", "嵌入式系统", "可编程逻辑", "系统级芯片", "存储器", "模拟电路", "数字电路 ", "电源管理", "显示技术 ", "传感器 ", "光电/显示", "分立器件", "无源元件", "其他"]);
            dsy.add("0_0_0", ["CPU", "DSP+MCU", "处理器核 ", "DSC", "多核处理器"]);
            dsy.add("0_0_0_0", ["cpu主板", "cpu核", "cpu频率", "虚拟cpu", "cpu芯片", "cpu主频", "cpu监控", "inter cpu"]);
            dsy.add("0_0_0_1", ["dsp mcu", "dsp单片机", "mcu usb", "嵌入式技术", "mcu应用", "嵌入系统", "dsp解码", "mcu 视频", "dsp应用", "信号处理"]);
            dsy.add("0_0_0_2", ["英特尔处理器", "笔记本处理器", "cpu处理器", "四核cpu", "电脑处理器", "arm处理器", "英特尔四核", "i7处理器", "手机处理器", "多核处理器"]);
            dsy.add("0_0_0_3", ["dsc", "dsc 相机5,400 4,400", "dsc-tx9c 1,300 1,000", "dsc-t99c 390 320", "dsc-hx5c 390 320", "dsc曲线 1,000 260", "dsc-t99dc 260 210", "dsc-wx5c 260 210", "dsc-tx7c 210 170", "dsc-j10 "]);
            dsy.add("0_0_0_4", ["多核处理器", "多核处理器技术", "嵌入式多核处理器", "多核网络处理器", "intel多核处理器", "多核处理器体系结构"]);
        </script>
    </head>
    <body onload="setup()">
        <form name="frm" id="frm" enctype="multipart/form-data" method="post" action="diqu.sub.php">
        <select name="s1" id="s1">
            <option>请选择</option>
        </select>
        <select name="s2" id="s2">
            <option>请选择</option>
        </select>
        <select name="s3" id="s3">
            <option>请选择</option>
        </select>
        <div style="width: 400px;">
            <span id="s4">12</span>
        </div>
        <input name="button" type="submit" class="nnt_submit" id="button" value="测 试" />
        </form>
    </body>
    </html>把你的代码拿过来, 改得规范了一点, 没有大的变化。 上面的代码已经可以运行。 
    唯一的错误是:  length = 0; 前面没有加 var.
    你的代码写得很优雅, 只是不太规范, 试着用VS吧, Ctrl+K+D就可以把代码整理好, 不规范的地方还会有颜色提示。 
      

  3.   

    1。尽量不要用length之类的javascript中的关键字做变量, 有时候可能会出现错误;
    2。尽量定义变量了再使用;
      

  4.   

    唯一的错误是: length = 0; 前面没有加 var.
    谢谢yenange,就是上面这个小错误。上面的代码选择关键字
    这是四级联动,很好用。可以用作分类,大家还可以生成,3级,5级,6级,改改数组,和HTML就行,希望大家可以用着
    <html> 
    <head> 
    <title>关联菜单</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <SCRIPT LANGUAGE="JavaScript"> 
    <!-- 
    function Dsy() 

    this.Items = {}; 

    Dsy.prototype.add = function(id,iArray) 

    this.Items[id] = iArray; 

    Dsy.prototype.Exists = function(id) 

    if(typeof(this.Items[id]) == "undefined") return false; 
    return true; 

    function change(v){ 
    var str="0"; 
    for(i=0;i<v;i++){ str+=("_"+(document.getElementById(s[i]).selectedIndex-1));}; 
    var ss=document.getElementById(s[v]); 
    with(ss){ 
    length = 0; 
    options[0]=new Option(opt0[v],opt0[v]); 
    if(v && document.getElementById(s[v-1]).selectedIndex>0 || !v) 

    if(dsy.Exists(str)){ 
    ar = dsy.Items[str]; 
    for(i=0;i<ar.length;i++)options[length]=new Option(ar[i],ar[i]); 
    if(v)options[1].selected = true; 


    if(++v<s.length){change(v);} 


            var dsy = new Dsy();
            dsy.add("0", ["器件", "应用"]);
            dsy.add("0_0", ["处理器", "嵌入式系统", "可编程逻辑", "系统级芯片", "存储器", "模拟电路", "数字电路 ", "电源管理", "显示技术 ", "传感器 ", "光电/显示", "分立器件", "无源元件", "其他"]);
            dsy.add("0_0_0", ["CPU", "DSP+MCU", "处理器核 ", "DSC", "多核处理器"]);
            dsy.add("0_0_0_0", ["cpu主板", "cpu核", "cpu频率", "虚拟cpu", "cpu芯片", "cpu主频", "cpu监控", "inter cpu"]);
            dsy.add("0_0_0_1", ["dsp mcu", "dsp单片机", "mcu usb", "嵌入式技术", "mcu应用", "嵌入系统", "dsp解码", "mcu 视频", "dsp应用", "信号处理"]);
            dsy.add("0_0_0_2", ["英特尔处理器", "笔记本处理器", "cpu处理器", "四核cpu", "电脑处理器", "arm处理器", "英特尔四核", "i7处理器", "手机处理器", "多核处理器"]);
            dsy.add("0_0_0_3", ["dsc", "dsc 相机5,400 4,400", "dsc-tx9c 1,300 1,000", "dsc-t99c 390 320", "dsc-hx5c 390 320", "dsc曲线 1,000 260", "dsc-t99dc 260 210", "dsc-wx5c 260 210", "dsc-tx7c 210 170", "dsc-j10 "]);
            dsy.add("0_0_0_4", ["多核处理器", "多核处理器技术", "嵌入式多核处理器", "多核网络处理器", "intel多核处理器", "多核处理器体系结构"]);
    <body onload="setup()">
        <form name="frm" id="frm" enctype="multipart/form-data" method="post" action="diqu.sub.php">
        <select name="s1" id="s1">
            <option>请选择</option>
        </select>
        <select name="s2" id="s2">
            <option>请选择</option>
        </select>
        <select name="s3" id="s3">
            <option>请选择</option>
        </select>
        <select name="s4" id="s4">
            <option>请选择</option>
        </select>
        <input name="button" type="submit" class="nnt_submit" id="button" value="测 试" />
        </form>
    </body>
    </html>