动态移除下拉框的选项

chen505586338 2013-03-15 06:15:26
请问,有几个下拉框。前面选中之后,后面的下拉框里则移除或隐藏前面已经选中的选修,
比如下拉框里值是【1,2,3,4,5】,第一个选了1,后面就只剩下【2.3.4.5】,在后面只剩【3.4.5】,跪求帮助啊。
...全文
658 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
scscms太阳光 2013-03-18
  • 打赏
  • 举报
回复
<div id="list">生成下拉菜单地方</div>
<script type="text/javascript">
    var arr=[1,2,3,4,5];//下拉菜单值
    var txt=["菜单1","菜单2","菜单3","菜单4","菜单5"];//下拉菜单文本
    var num=2;//生成几级下拉菜单(从0算起,但不可超出数组下标)
    var i_all=num>arr.length-1?arr.length-1:num;//判断是否超出数组下标
    var str="";
    for(var i=0;i<=i_all;i++){
        if(i<i_all){
            str+='<select name="cat'+i+'" onchange="option('+i+')" id="cat'+i+'">';
        }else{
            str+='<select name="cat'+i+'" id="cat'+i+'">';
        }
        if(i==0){
            for(var n=0;n<arr.length;n++){
                str+='<option value="'+arr[n]+'">'+txt[n]+'</option>';
            }
        }
        str+='</select>';
    }
    document.getElementById("list").innerHTML=str;
    function option(i){
        if(i>=i_all)return;
        var obj=document.getElementById("cat"+i);
        var opt=obj.options;
        var thi=document.getElementById("cat"+(i+1));
        thi.innerHTML="";
        for(var n=0;n<opt.length;n++){
            if(n!=obj.selectedIndex){
                str = new Option(opt[n].text,opt[n].value);
                thi.options.add(str);
            }
        }
        if(i+1<i_all)option(i+1);
    }
    option(0);
</script>
chen505586338 2013-03-18
  • 打赏
  • 举报
回复
引用 8 楼 chen505586338 的回复:
引用 7 楼 yenange 的回复:JavaScript code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ……
引用 7 楼 yenange 的回复:
JavaScript code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>123</title>……
您的效果是第一个选了1,第二个1没了。第一个重新选了2,第二个1和2都没了。能不能第一个选了2第二个1再出来呀!
chen505586338 2013-03-18
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
JavaScript code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>123</title>……
哥哥。麻烦写个注释呗。
Kilin_Zhang 2013-03-18
  • 打赏
  • 举报
回复

<div id="container">
		<select></select>
		<select></select>
		<select></select>
	</div>
	<script type="text/javascript">
	    var map = {1:1,2:2,3:3,4:4,5:5};
	    var selectList = document.getElementById("container").getElementsByTagName("select");
	    var select,option;
	    for(var i=0;i<selectList.length;i++){
	         select = selectList[i];
		 option = createOption("0","--全部--");
		 select.appendChild(option);
	         for(var j in map){
		     option = createOption(j,map[j]);
		     select.appendChild(option);
		 }
		 //最后一个select不需要change的联动效果
		 if(i<selectList.length - 1){
		     select.onchange = change;
		 }
	    }
	    function createOption(value,text){
		var opt = document.createElement("option"); 
		opt.value = value;
		opt.text = text;
		return opt;
	    }
	    function change(){
		var m={},i=0,selectedValues=[],tmp={},value;
		for(;i<selectList.length;i++){
		    select = selectList[i];
		    m[select.value] = select.value;
		    if(select == this){
			break;
		    }
		}
		for(var v in map){
		    if(m[v] === undefined){
			tmp[v] = map[v];
		    }
		}
		for(var j=i+1;j<selectList.length;j++){
		    select = selectList[j];
		    value = select.value;
		    select.options.length = 1;
		    for(var v in tmp){
			option = createOption(v,tmp[v]);
			select.appendChild(option);
		    }
		    if(tmp[value]){
		        select.value = value;
		    }
		    if(map[value] !== undefined){
		    	tmp[value] = map[value];
		    }
		}
		
	    }
	</script>
吉普赛的歌 2013-03-18
  • 打赏
  • 举报
回复
引用 9 楼 chen505586338 的回复:
引用 8 楼 chen505586338 的回复:引用 7 楼 yenange 的回复:JavaScript code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<html xmlns="http://www.w3.org/1999/xhtml"……
别急, 这个代码就是百分百完美的了, 保证你好用!!
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>123</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>  
    <script type="text/javascript">
        //--------  注:本代码功能易于扩展,无论再增加任意多的select,只要设置父id (parentId) 即可 --------
        //页面加载完毕
        $(function () {
            //将div容器内的所有 select 设置 change 事件
            $("#divContainer select").change(function () {
                //设置下一级的变化情况
                recursionSetSubSelect(this.id)
            }).each(function () {
                //将每一个select 的原有html保存
                $(this).data("selfHtml", $(this).html());
            });
            //递归设置子一级select
            function recursionSetSubSelect(selectId) {
                //找到下一级的select (B)
                var $subSelect = $("select[parentId='" + selectId + "']");
                //如果无下一级,不作任何操作
                if ($subSelect.length == 0) {
                    return;
                }
                //找到 B 对应所有父级选中项,放在数组
                var valArr = [];
                findAllParentValues($subSelect.attr("parentId"), valArr);
                //清空 B 的所有option
                $subSelect.empty();
                //在原数据(html)中遍历每一个option, 并与数组对比。
                var $selfHtml = $($subSelect.data("selfHtml"));
                $selfHtml.filter("option").each(function () {
                    //如果父级没有用过的(不在数组中),则添加到 B
                    var isUsed = $.inArray($(this).val(), valArr) != -1;
                    if (!isUsed) {
                        $subSelect.append($(this));
                    }
                });
                //递归设置下一级的select 
                recursionSetSubSelect($subSelect.attr("id"));
            }
            //递归查找select所有父级选中项的数组
            function findAllParentValues(selectId, valArr) {
                //找到父级对象 A
                var $parentSelect = $("#" + selectId);
                //如无父级,不作任何操作, 返回数组即可
                if ($parentSelect.length == 0) {
                    return valArr;
                }
                //将A的选中项放在数组中
                valArr.push($parentSelect.val());
                return findAllParentValues($parentSelect.attr("parentId"), valArr);
            }
        });
    </script>
</head>
<body>
<div id="divContainer" >
    <select id="select_1">   
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <select id="select_2" parentId="select_1">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <select id="select_3" parentId="select_2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
</div>
</body>
</html>
吉普赛的歌 2013-03-15
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>123</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>  
    <script type="text/javascript">
        $(function () {
            $("#divContainer select").change(function () {
                recursionRemove(this.id, this.value)
            });

            function recursionRemove(selectId, value) {
                var $subSelect = $("select[parentId='" + selectId + "']");
                if ($subSelect.length == 0) {
                    return;
                }
                $subSelect.find("option[value='" + value + "']").remove();
                recursionRemove($subSelect.attr("id"), value);
            }
        });
    </script>
</head>
<body>
<div id="divContainer" >
    <select id="select_1">   
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <select id="select_2" parentId="select_1">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <select id="select_3" parentId="select_2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
</div>
</body>
</html>
上海程序员3 2013-03-15
  • 打赏
  • 举报
回复
用innerHTML把select重写更快
bbjbepzz 2013-03-15
  • 打赏
  • 举报
回复

<script type="text/javascript">
function fn(index){
    var val = document.getElementById('select_' + index).value;
    var _options;
    for(var i = index+1 ; i < 4 ; ++i){
        _options = document.getElementById('select_' + i).options;        
        for(var j = _options.length-1 ; j >=0 ; --j){
            if(_options[j].value==val || ( i == 3 && document.getElementById('select_1').value == _options[j].value )){
                _options[j].style.display = 'none';                
            }else{
                _options[j].style.display = 'block';
                document.getElementById('select_'+i).value = _options[j].value;
            }
        }
    }
}
</script>
<select id="select_1" onchange="fn(1)">    
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>
<select id="select_2" onchange="fn(2)">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>
<select id="select_3" onchange="fn(3)">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>
chen505586338 2013-03-15
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
<!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> <meta http-……
哥哥。能不能选完1,1就在第一个框里,第二个,第3以后框里没有1,类推。
chen505586338 2013-03-15
  • 打赏
  • 举报
回复
引用 2 楼 bbjbepzz 的回复:
JavaScript code?12345678910111213141516171819202122232425262728293031323334353637<script type="text/javascript">function fn(index){ var val = document.getElementById('select_' + index)……
您的这个跑不起来吧。
bbjbepzz 2013-03-15
  • 打赏
  • 举报
回复


<script type="text/javascript">
function fn(index){
	var val = document.getElementById('select_' + index).value;
	var _options;
	for(var i = index+1 ; i < 4 ; ++i){
		_options = document.getElementById('select_' + i).options;		
		for(var j = 0 ; j < _options.length ; ++j){
			if(_options[j].value==val || ( i == 3 && document.getElementById('select_1').value == _options[j].value )){
				_options[j].style.display = 'none';
			}else{
				_options[j].style.display = 'block';
			}
		}
	}
}
</script>
<select id="select_1" onchange="fn(1)">	
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
</select>
<select id="select_2" onchange="fn(2)">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
</select>
<select id="select_3" onchange="fn(3)">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
</select>
似梦飞花 2013-03-15
  • 打赏
  • 举报
回复
<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript"> var t=[]; function removes(srcdom,id){ var i=srcdom[srcdom.selectedIndex].innerHTML; if(i!='请选择'){ t.push(i); var se=document.getElementById(id); for(var j=0;j<se.length;j++){ if(id=="test3"){ alert("a"); for(var k=0;k<t.length;k++){ if(se[j].innerHTML==t[k]){ se.removeChild(se[j]); } } }else{ if(se[j].innerHTML==i){ se.removeChild(se[j]); } } } } } </script> </head> <body> <select id="test1" onchange="removes(this,'test2')"> <option>请选择</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> <select id="test2" onchange="removes(this,'test3')"> <option>请选择</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> <select id="test3"> <option>请选择</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> </body> </html> 这样??

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧