如何通过JavaScript以编程方式取消多选下拉框的选项选中状态?
如何通过JavaScript以编程方式取消多选下拉框的选项选中状态?
嘿,我完全懂你遇到的困扰!你想在移除顶部标签的时候,同时让多选下拉框里对应的选项也取消选中,但用setAttribute('selected', false)就是没效果,对吧?
其实问题出在HTML布尔属性的特性上:像selected这种布尔属性,只要它存在于元素上,不管属性值是true还是false,浏览器都会认为这个选项是选中的。你用setAttribute('selected', false)只是把属性值改成了false,但selected属性本身还在,所以选项看起来还是选中的状态。
另外你的代码里还有个小bug:一开始声明的变量是elementToRemove = null,但后面却用了elementToDeselect,这会导致变量未定义的错误哦。
给你修正后的removeTags函数,这样就能达到你想要的效果了:
function removeTags(event) { var clickedTag = event.target; var selectBox = clickedTag.closest("div").querySelector("select"); var selectOptions = Array.from(selectBox.options); var tagText = clickedTag.parentNode.querySelector(".value").textContent; // 修正变量名,统一用elementToDeselect var elementToDeselect = null; // 从结果数组中移除标签 results = results.filter((tag) => tag !== tagText); // 找到对应的选项,直接设置selected属性为false elementToDeselect = selectOptions.find((o) => o.text === tagText); if (elementToDeselect) { elementToDeselect.selected = false; } renderTags(); }
核心的修改点就是:不要用setAttribute来操作selected属性,直接给option元素的selected属性赋值布尔值false。因为DOM元素的selected是一个布尔类型的属性,直接赋值false会正确更新它的选中状态,浏览器会立刻识别到这个变化并更新下拉框的显示。
这样修改后,你移除标签的时候,对应的下拉选项就会自动取消选中啦!
备注:内容来源于stack exchange,提问作者Razvan Zamfir
相关产品推荐
相关产品推荐

