<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] +" ";
}
}
$("#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下只显示前三级,无法显示第四级。我的选择地四级的值
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] +" ";
}
}
$("#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下只显示前三级,无法显示第四级。我的选择地四级的值
<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] + " ";
}
}
$("#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就可以把代码整理好, 不规范的地方还会有颜色提示。
2。尽量定义变量了再使用;
谢谢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>