javascript - 所有下拉菜单的文本内容同时变化,而不是单独更新
问题描述
我的网站上有三个通过 Bootstrap 创建的下拉菜单。 理想情况下,当用户单击下拉菜单并选择内部菜单项之一时,下拉菜单应将其文本内容更新为所选菜单项的文本内容。
但是,对于任何下拉菜单,如果用户单击菜单项,则所有三个下拉菜单的文本内容都会更新,而不是仅更新单个下拉菜单,如下所示
我目前的方法是,aria-expanded
每个下拉按钮的属性都会更改为true
是否在按钮上打开了下拉菜单。如果aria-expanded
特定下拉菜单的值为true
,则该按钮的文本内容将更改为所选菜单项的文本内容。
JS
function addPlanesToDropDowns() {
let dropdowns = document.querySelector('.dropdown-menu');
let dropDownButtonOne = document.querySelector('#dropdownMenuButtonOne');
let dropDownButtonTwo = document.querySelector("#dropdownMenuButtonTwo");
let dropDownButtonThree = document.querySelector("#dropdownMenuButtonThree");
dropDownDisabledCheck();
for (let i = 0; i < state.airplaneData.length; i++) {
let dropDownMenuItem = document.createElement('a');
dropDownMenuItem.classList.add('dropdown-item');
dropDownMenuItem.href = '#';
dropDownMenuItem.textContent = state.airplaneData[i].make + " " + state.airplaneData[i].model;
dropDownMenuItem.addEventListener('click', function (event) {
event.preventDefault();
if (dropDownButtonOne.getAttribute('aria-expanded')) {
dropDownButtonOne.textContent = dropDownMenuItem.textContent;
dropDownButtonOne.setAttribute('aria-expanded', false);
}
if (dropDownButtonTwo.getAttribute('aria-expanded')) {
dropDownButtonTwo.textContent = dropDownMenuItem.textContent;
dropDownButtonTwo.setAttribute('aria-expanded', false);
}
if (dropDownButtonThree.getAttribute('aria-expanded')) {
dropDownButtonThree.textContent = dropDownMenuItem.textContent;
dropDownButtonThree.setAttribute('aria-expanded', false);
}
dropDownDisabledCheck();
});
dropdowns.appendChild(dropDownMenuItem);
}
}
HTML
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonOne" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Plane 1</button>
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonTwo" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Plane 2</button>
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonThree" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Plane 3</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<!-- <a class="dropdown-item" href="#">Planes go here</a> -->
</div>
</div>
尽管如此,所有三个下拉菜单都会使用相同的选定菜单项文本内容进行更新,即使我只是在具有特定 ID 属性的按钮元素上设置文本内容。
解决方案
这段代码dropDownButtonOne.getAttribute('aria-expanded')
返回一个字符串,而不是布尔值,所以要么"true"
要么"false"
。
因为它是一个非空字符串,所以它总是评估为 TRUE。你需要改变你的状况。
例如,您可以检查if(dropDownButtonOne.getAttribute('aria-expanded') === "true")
。
推荐阅读
- visual-studio - Visual Studio 报告 System.Reflection.MissingMetadataException 编译时使用 .net 本机工具链
- netsuite - formulatext filter in search - SuiteScript 2.0
- python - How to return a data path using class in python
- ios - Is there any way to put a segmented picker into a scrollview in SwiftUI?
- sql - 在滚动两周内查找唯一计数
- mongodb - 如何使用另一个字段的值更新 MongoDB 字段
- java - Java ConcurrentHashMap 初始化
- node.js - 如何使用 bootstrap-vue 上传多个文件
- c# - 使用 CefSharp 将 HTML 转为 PDF
- animation - 如何使用 GNU Octave 制作移动点阵的动画