问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有三个<select></select>,初始化时每个select都有三个值,分别是姓名,职位,公司名称。

发布网友 发布时间:2022-05-16 21:18

我来回答

3个回答

热心网友 时间:2023-09-10 23:43

//下拉框选项
var maps = [{ "text": "请选择", "value": "0" },
    { "text": "姓名", "value": "1" },
    { "text": "职位", "value": "2" },
    { "text": "公司名称", "value": "3"}];
//需要变更的下拉框 ID 集合
var sltIDs = ["slt1", "slt2", "slt3"];
//作为重置的选项值
var defaultValue = "0";
//需要变更的下拉框对象集合
var slts = new Array();
window.onload = function () {
    for (var i = 0; i < sltIDs.length; i++) {
        //将下拉框对象纳入集合
        slts[slts.length] = document.getElementById(sltIDs[i]);
        //为下拉框绑定“选项改变”事件
        slts[slts.length - 1].onchange = function () { sltChange(this); };
        //为下拉框绑定“获得焦点”事件
        //便于记录下拉框‘改变前’的选择项
        slts[slts.length - 1].onfocus = function () { sltFouce(this); };
        //初始化下拉框的下拉选项
        initItem(slts[slts.length - 1]);
    }
}
function initItem(sltObj) {
    for (var i = 0; i < maps.length; i++) {
        //为下拉框添加 maps 中的选项
        sltObj.options.add(new Option(maps[i].text, maps[i].value));
    }
}
function sltFouce(sltObj) {
    //将‘当前选中项’写入当前下拉框的自定义属性 lastValue 中
    sltObj.setAttribute("lastValue", sltObj.value);
}
function sltChange(sltObj) {
    if (sltObj.value == defaultValue) { //当选中值为‘重置选中值’时
        //为其他下拉框添加‘原先选中’的选项
        addItem(sltObj);
    } else { //当选中值为需要‘删除其他下拉框相同选项’时
        //删除其他下拉框‘当前选中’的选项
        delItem(sltObj);
        //如果原先选中的‘不是重置选中值’时
        if (sltObj.getAttribute("lastValue") != defaultValue) {
            //为其他下拉框添加‘原先选中’的选项
            addItem(sltObj);
        }
    }
    sltFouce(sltObj);
}
function addItem(sltObj) {
    for (var i = 0; i < slts.length; i++) {
        //不是当前触发事件的下拉框
        if (slts[i].id != sltObj.id) {
            //插入‘原先选中’的选项
            insertItem(sltObj.getAttribute("lastValue"), slts[i]);
        }
    }
}
function delItem(sltObj) {
    for (var i = 0; i < slts.length; i++) {
        //当前触发事件的下拉框‘忽略’
        if (slts[i].id == sltObj.id) {
            continue;
        }
        for (var j = 0; j < slts[i].options.length; j++) {
            //删除‘当前下拉框选中的项’
            if (slts[i].options[j].value == sltObj.value) {
                slts[i].options.remove(j);
                break;
            }
        }
    }
}
//按顺序插入项的算法,参数:原先选中的 Value, 需要插入该项的下拉框
function insertItem(insertValue, insertSlt) {
    var valueItem = null;
    var lastItem = null;
    var itemIndex = insertSlt.options.length - 1;
    for (var i = maps.length - 1; i > -1; i--) {
        if (maps[i].value == insertValue) {
            valueItem = maps[i];
            if (lastItem == null) {
                insertSlt.options.add(new Option(maps[i].text, maps[i].value));
            } else {
                insertSlt.options.add(new Option(valueItem.text, valueItem.value), ++itemIndex);
            }
            break;
        }
        if (maps[i].value == insertSlt.options[itemIndex].value) {
            lastItem = maps[i];
            itemIndex--;
        }
    }
}

<select id="slt1"></select>
<select id="slt2"></select>
<select id="slt3"></select>

思路是:

某个下拉框选中某项时,删除其他下拉框的相同选项

如果原先选中项,不是“请选择”时,则为其他下拉框添加原先的选中项

 

如果从某个选中项,改选为“请选择”时,也为其他下拉框添加原先的选中项

 

因为你这里有3个选项,又恰好,有3个下拉框,

一旦选择其中一项,按逻辑,就没有办法让其他下拉框包含这一项。

所以这里多加了一个重置项“请选择”。

 

如果你的选项数超过下拉框数,则可以不加“重置项”

但初始化的时候,你为各个下拉框赋默认值的时候就比较麻烦。

所以从代码角度,和友好度角度,还是加个“请选择”比较好

热心网友 时间:2023-09-10 23:44

把这3个select放到一个层内,给层取个id名字,通过id遍历下面三个select,在每个select的onchange事件中执行,重构每个select的option

热心网友 时间:2023-09-10 23:44

可以通过js还实现追问嗯嗯,我知道,但是具体思路呢?

追答具体思路就是,每次选择时让当前select包含所有选项,再判断前面的select是否包含姓名等,包含就把当前select的姓名等去掉

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦幻西游我这吸血鬼值多少钱 梦幻西游吸血鬼价格问题,这个吸血鬼能卖多少钱啊?MHB比例100元=500W 给... 诚心求解梦幻西游,我这只吸血鬼能值多少钱?我要个能卖出去的价... 梦幻西游手游,我现在69级,买个79的吸血鬼,可以带吗, 我梦幻西游69J号买了个119级吸血鬼,但是不能摆摊出售,那可以跟别人交易... 梦幻西游手游洗出变异吸血鬼不能摆摊 梦幻西游本人80级 有一只吸血鬼 系统不给摆摊 请问能否交易 和平精英 和平精英封号了能注销掉吗? 梦见想蛇一样的东西掉进下水道 梦见包掉到下水道里 VB读取注册表键值 CF主机连接延迟 怎样显示件被用注册表项文件隐藏的文件 vb注册表读取,谁帮我解释下?! 关机自动清理 调用GetStringValue( &quot;DEVICE USE&quot;, &quot;VALUE&quot;, &quot;NO&quot; )函数,具体实现如下 想问下这个函数是什么功能 D盘根目录下隐藏文件,删除了还有 VISTA系统C盘清理 看不懂这个分页控件,? 网页满屏显示代码 芒果肉变紫放的时间久了还能吃吗 国际航空行李托运,能带几个行李箱,要超过了怎么收费? 厨房设计需要注意什么? 大叶旱柳与小叶旱柳做案板哪个更好 怎么能让卖肉案板变凉? 《禁毒法》规定的禁毒工作机制是 《中华人民共和国禁毒法》规定…… 禁毒法第13条规定答案是什么 想要一段长期的亲密关系,在生活中应该怎么做呢? 花呗逾期可以打电话给客服申请开通吗? 怎么写清理系统垃圾文件程序 C盘的容量日益减小,几乎为0字节了,但是每次我清理了后就会多几M不等,我该如何处理这个问题才使我的C盘 山东省大学生科技节含金量 win7旗舰版,文件夹选项里的“隐藏文件和文件夹&quot;选项和下面的2个子选项不见了 求助shell脚本修改xml的值 大学生科学技术协会可以举办什么活动 学术科技节是啥意思 我是刚刚进大学的大学生,要搞个科技节,但是不知道做什么小发明啊 大学生科研比赛学术类作品会在哪公布 学校要举办第十二届大学生课外学术科技节,开幕式以什么形式好呢? 大学生科技节,有木有比较适合的小游戏 教师是否属于特定行业 工业建筑是否属于特定行业 教育机构算特定行业吗 Ipo创业板申报文件中的特定行业指哪些行业? 冰箱表面是不是有磁力? 网站网页全屏幕代码 冰箱上贴磁性的东西有影响吗 满族和女真族的关系是什么? 女真族和满族的关系是什么?