Javascript 如果在选择列表中选择了一个选项,如何禁用另一个选择列表中具有相同值的选项

Javascript 如果在选择列表中选择了一个选项,如何禁用另一个选择列表中具有相同值的选项,javascript,jquery,html,Javascript,Jquery,Html,我有两个选择输入,如果我从第一个选择,第二个选择有相同的值从第二个输入禁用,只选择该选项,以阻止用户选择2个相同的值。 这是我的html: $document.readyfunction{ $'tip\u rola1'.更改函数{ var tip_rola1=$this.val; $'tip_rola2'.更改函数{ var tip_rola2=$this.val; var n1=端头1; iftip_rola1==tip_rola2{ alerttip_rola2; } } } }; 选择1

我有两个选择输入,如果我从第一个选择,第二个选择有相同的值从第二个输入禁用,只选择该选项,以阻止用户选择2个相同的值。 这是我的html:

$document.readyfunction{ $'tip\u rola1'.更改函数{ var tip_rola1=$this.val; $'tip_rola2'.更改函数{ var tip_rola2=$this.val; var n1=端头1; iftip_rola1==tip_rola2{ alerttip_rola2; } } } }; 选择1 选择 70 76 80 84 35 38 40 42 选择2 选择 70 76 80 84 35 38 40 42
您没有表现出自己的任何努力,但是考虑到您是新手,而且解决方案非常简单,下面是一个演示所需行为的片段。每当其中一个选项发生更改时,循环另一个选项中的选项,并将其禁用属性设置为true(如果其值与在更改的选择中选择的值相同),否则设置为false

顺便说一句,您第一次选择id=tip_rola1时,应该将name属性设置为tip_rola1,而不是tip_rola2

函数selectChangehandlerevent{ 让thissect=event.target; 让otherSelect=document.getElementById`tip\u rola${thisSelect.id==='tip\u rola1'?2:1}`; otherSelect.querySelectorAll'option'.forEachfunctionoption{ option.disabled=option.value==thisSelect.value; }; } getElementById'tip\u rola1'。添加EventListener'change',选择ChangeHandler; getElementById'tip_rola2'。添加EventListener'change',选择ChangeHandler; 选择1 选择 70 76 80 84 35 38 40 42 选择2 选择 70 76 80 84 35 38 40 42 您好,您可以添加一个函数并将事件作为参数发送,如下所示:

const validate=event=>{ const id=event.target.id; 常量下拉列表=[“tip_rola1',“tip_rola2']; const secondDropdownId=dropdowns.filterx=>x!==id[0]; const secondDropdown=document.getElementByIdsecondDropdownId; const dropdownSelected=document.getElementById; ifevent.target.value==secondDropdown.value{ secondDropdown.setAttribute'disabled',; dropdownSelected.setAttribute'disabled'; } 否则{ dropdownSelected.removeAttribute'disabled'; 第二个下拉列表。删除属性“已禁用”; } } 选择1 选择 70 76 80 84 35 38 40 42 选择2 选择 70 76 80 84 35 38 40 42 答复: HTMLSelectElement已包含选项的HTMLCollection 每个框的元素。这可以通过 HTMLSelectElement.options。您不需要进行单独的查询 获取这些元素

请记住,options返回的是HTMLCollection而不是数组,它不像forEach那样随数组方法一起提供,而是 仍然可以通过使用for循环进行迭代

HTMLSelectElement还有一个selectedIndex属性,表示 已选择哪个选项。这使我们能够获得当前的 所选选项如下:HTMLSelectElement.options[ HTMLSelectElement.selectedIndex]

您的更改事件侦听器可以按如下方式进行调整,以获得所需的效果:

// Get selected value of first Select
  const selected = s.options[s.selectedIndex].value;

// Adjust second Select options 
  for (let opt of s2.options) {
    opt.disabled = opt.value === selected;
  }
例子: 让[s,s2]=document.queryselect或allselect; s、 addEventListenerchange,函数{ const selected=s.options[s.selectedIndex]。值; 让我们选择s2.options{ opt.disabled=opt.value==selected; } }; 选择1 选择 70 76 80 84 35 38 40 42 选择2 选择 70 76 80 84 35 38 40 42
所以现在的问题是标题还是真正的问题?不要吝啬我在努力学习。这里没有问题。您刚刚描述了所需的行为。我正在尝试找出如何检测两个选择输入是否选择了相同的选项…@Edward我们并不都生活在您的国家。有些人可能会有一个美好的夜晚,晚上,早上。。。请尝试通过指出当前代码的问题来提问。这个答案很好!要添加到其中,根据目标ecma脚本版本/浏览器兼容性,您可以使用Array.from或spread运算符[…nodeListOrHtmlCollection]将HTMLCollection或NodeList转换为数组并使用其方法。