玩一把.. 应该是这样的需求吧?<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script type="text/javascript"> // 数组过滤器 if(!Array.prototype.filter) { Array.prototype.filter = function(fn,thisObj){ var scope = thisObj || window; var ret = []; for(var i=0,len=this.length;i<len;i++) { if(!fn.call(scope,this[i],i,this)) { continue; } ret.push(this[i]); } return ret; } }// 存放第一个select内容 var arr = [12,13,19,22];// 程序入口 window.onload = function() { bindSelect('s1',arr); }// 绑定select数据 function bindSelect(id,arr) { var select = document.getElementById(id); select.innerHTML = ''; appendOption(select,'-请选择-') for(var i=0,len=arr.length;i<len;i++){ var val = arr[i]; appendOption(select,val,val); } }// 添加option function appendOption(select,text,value) { var opt = document.createElement('option'); opt.innerHTML = text; if(typeof value !== 'undefined') { opt.setAttribute('value',value); } select.appendChild(opt); }function onchangeHandler(target,nextSelectId) { var value = target.value; if(value) { // 过滤已经有的 var ret = arr.filter(function(val){ return val != value; }); // 绑定下一个select的数据 bindSelect(nextSelectId,ret); } } </script> </HEAD><BODY> <select id="s1" onchange="onchangeHandler(this,'s2')"></select> <select id="s2" onchange="onchangeHandler(this,'s3')"></select> <select id="s3"></select> </BODY> </HTML>
上面的有问题,稍微改下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script type="text/javascript"> // 数组过滤器 if(!Array.prototype.filter) { Array.prototype.filter = function(fn,thisObj){ var scope = thisObj || window; var ret = []; for(var i=0,len=this.length;i<len;i++) { if(!fn.call(scope,this[i],i,this)) { continue; } ret.push(this[i]); } return ret; } }// 存放第一个select内容 var arr = [12,13,19,22];// 程序入口 window.onload = function() { bindSelect('s1',arr); }// 绑定select数据 function bindSelect(id,arr) { var select = document.getElementById(id); select.innerHTML = ''; appendOption(select,'-请选择-') for(var i=0,len=arr.length;i<len;i++){ var val = arr[i]; appendOption(select,val,val); } }// 添加option function appendOption(select,text,value) { var opt = document.createElement('option'); opt.innerHTML = text; if(typeof value !== 'undefined') { opt.setAttribute('value',value); } select.appendChild(opt); }function onchangeHandler(target,nextSelectId) { var value = target.value; if(value) {
var arr = getOptionsArr(target); // 过滤已经有的 var ret = arr.filter(function(val){ return val != value; }); // 绑定下一个select的数据 bindSelect(nextSelectId,ret); } }function getOptionsArr(select) { var opts = select.getElementsByTagName('option');
var ret = []; for(var i=0,len=opts.length;i<len;i++) { var value = opts[i].getAttribute('value'); if(value) { ret.push(opts[i].getAttribute('value')); } }
仍有问题,选择完后,重新选择第一个就出问题啦。 试试这个吧:<select name="cat1" id="cat1"></select> <select name="cat2" id="cat2"></select> <select name="cat3" id="cat3"></select> <script type="text/javascript"> var arr=[12,13,19,22]; var str=["菜单12","菜单13","菜单19","菜单22"]; var select1=document.getElementById("cat1"); var select2=document.getElementById("cat2"); var select3=document.getElementById("cat3"); for(var i=0;i<arr.length;i++){ var item = new Option(str[i],arr[i]); select1.options.add(item); } option(2); option(3); select1.onchange=function(){ option(2); option(3); }; select2.onchange=function(){ option(3); }; function option(i){ var obj=window["select"+(i-1)]; var opt=obj.options; var thi=window["select"+i]; thi.innerHTML=""; for(var n=0;n<opt.length;n++){ if(n!=obj.selectedIndex){ var item = new Option(opt[n].text,opt[n].value); thi.options.add(item); } } } </script>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script type="text/javascript">
// 数组过滤器
if(!Array.prototype.filter) {
Array.prototype.filter = function(fn,thisObj){
var scope = thisObj || window;
var ret = [];
for(var i=0,len=this.length;i<len;i++) {
if(!fn.call(scope,this[i],i,this)) {
continue;
}
ret.push(this[i]);
}
return ret;
}
}// 存放第一个select内容
var arr = [12,13,19,22];// 程序入口
window.onload = function() {
bindSelect('s1',arr);
}// 绑定select数据
function bindSelect(id,arr) { var select = document.getElementById(id);
select.innerHTML = ''; appendOption(select,'-请选择-') for(var i=0,len=arr.length;i<len;i++){
var val = arr[i];
appendOption(select,val,val);
}
}// 添加option
function appendOption(select,text,value) {
var opt = document.createElement('option');
opt.innerHTML = text;
if(typeof value !== 'undefined') {
opt.setAttribute('value',value);
}
select.appendChild(opt);
}function onchangeHandler(target,nextSelectId) {
var value = target.value;
if(value) {
// 过滤已经有的
var ret = arr.filter(function(val){
return val != value;
}); // 绑定下一个select的数据
bindSelect(nextSelectId,ret);
}
}
</script>
</HEAD><BODY>
<select id="s1" onchange="onchangeHandler(this,'s2')"></select>
<select id="s2" onchange="onchangeHandler(this,'s3')"></select>
<select id="s3"></select>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script type="text/javascript">
// 数组过滤器
if(!Array.prototype.filter) {
Array.prototype.filter = function(fn,thisObj){
var scope = thisObj || window;
var ret = [];
for(var i=0,len=this.length;i<len;i++) {
if(!fn.call(scope,this[i],i,this)) {
continue;
}
ret.push(this[i]);
}
return ret;
}
}// 存放第一个select内容
var arr = [12,13,19,22];// 程序入口
window.onload = function() {
bindSelect('s1',arr);
}// 绑定select数据
function bindSelect(id,arr) { var select = document.getElementById(id);
select.innerHTML = ''; appendOption(select,'-请选择-') for(var i=0,len=arr.length;i<len;i++){
var val = arr[i];
appendOption(select,val,val);
}
}// 添加option
function appendOption(select,text,value) {
var opt = document.createElement('option');
opt.innerHTML = text;
if(typeof value !== 'undefined') {
opt.setAttribute('value',value);
}
select.appendChild(opt);
}function onchangeHandler(target,nextSelectId) {
var value = target.value;
if(value) {
var arr = getOptionsArr(target);
// 过滤已经有的
var ret = arr.filter(function(val){
return val != value;
}); // 绑定下一个select的数据
bindSelect(nextSelectId,ret);
}
}function getOptionsArr(select) {
var opts = select.getElementsByTagName('option');
var ret = [];
for(var i=0,len=opts.length;i<len;i++) {
var value = opts[i].getAttribute('value');
if(value) {
ret.push(opts[i].getAttribute('value'));
}
}
return ret;
}
</script>
</HEAD><BODY>
<select id="s1" onchange="onchangeHandler(this,'s2')"></select>
<select id="s2" onchange="onchangeHandler(this,'s3')"></select>
<select id="s3"></select>
</BODY>
</HTML>
试试这个吧:<select name="cat1" id="cat1"></select>
<select name="cat2" id="cat2"></select>
<select name="cat3" id="cat3"></select>
<script type="text/javascript">
var arr=[12,13,19,22];
var str=["菜单12","菜单13","菜单19","菜单22"];
var select1=document.getElementById("cat1");
var select2=document.getElementById("cat2");
var select3=document.getElementById("cat3");
for(var i=0;i<arr.length;i++){
var item = new Option(str[i],arr[i]);
select1.options.add(item);
}
option(2);
option(3);
select1.onchange=function(){
option(2);
option(3);
};
select2.onchange=function(){
option(3);
};
function option(i){
var obj=window["select"+(i-1)];
var opt=obj.options;
var thi=window["select"+i];
thi.innerHTML="";
for(var n=0;n<opt.length;n++){
if(n!=obj.selectedIndex){
var item = new Option(opt[n].text,opt[n].value);
thi.options.add(item);
}
}
}
</script>