我是一个初学者,我正在try 过滤一组车辆,使用下拉菜单,第一个过滤器按品牌名称显示,然后第二个过滤器按车辆类型显示. 筛选器似乎工作得很好,但当我 Select 一个品牌,然后 Select 一个类型时,它会显示使用类型筛选器的所有项目数组,而忽略品牌筛选器

Array:

const Data = [
  {
    brand: "Volkswagen",
    type: "Car",
    model: "Golf",
    year: "2019",
    price: "$12,000",
  },
  {
    brand: "Volkswagen",
    type: "Truck",
    model: "Tiguan",
    year: "2020",
    price: "$20,000",
  },
  {
    brand: "Mazda",
    type: "Car",
    model: "Mazda 3",
    year: "2022",
    price: "$32,000",
  },
  {
    brand: "Mazda",
    type: "Truck",
    model: "Mazda 6",
    year: "2021",
    price: "$29,000",
  },
  {
    brand: "Tesla",
    type: "Car",
    model: "Model S",
    year: "2023",
    price: "$42,000",
  },
  {
    brand: "Tesla",
    type: "Truck",
    model: "Model X",
    year: "2020",
    price: "$50,000",
  },
];

Functions:

const getSelectedValue = () => {
  let brandSelection = document.getElementById("brandDropdown").value;
  let selection = document.getElementById("dropDownSelection");
  //   show all cars
  if (brandSelection === "All") {
    selection.innerHTML = "";
    Data.forEach((car) => {
      selection.innerHTML += `<div class="car">
            <h3>${car.brand}</h3>
            <p>${car.type}</p>
            <p>${car.model}</p>
            <p>${car.year}</p>
            <p>${car.price}</p>
        </div>`;
    });
  }
  //   show selected brand
  else {
    selection.innerHTML = "";
    Data.forEach((car) => {
      if (car.brand === brandSelection) {
        selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
      }
    });
  }

  console.log(brandSelection);
};

// filter by type when brand is selected

const getSelectedType = () => {
  let typeSelection = document.getElementById("typeDropdown").value;
  let selection = document.getElementById("dropDownSelection");
  //   show all cars
  if (typeSelection === "All") {
    selection.innerHTML = "";
    Data.forEach((car) => {
      selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
    });
  }
  //   show selected type
  else {
    selection.innerHTML = "";
    Data.forEach((car) => {
      if (car.type === typeSelection) {
        selection.innerHTML += `<div class="car">
                    <h3>${car.brand}</h3>
                    <p>${car.type}</p>
                    <p>${car.model}</p>
                    <p>${car.year}</p>
                    <p>${car.price}</p>
                </div>`;
      }
    });
  }

  console.log(typeSelection);
};

HTML:

<body>

    <div class="dropDown">
        <div class="Brand">
            <select name="" id="brandDropdown" onchange="getSelectedValue()">
                <option value="All">All</option>
                <option value="Volkswagen">Volkswagen</option>
                <option value="Mazda">Mazda</option>
                <option value="Tesla">Tesla</option>
            </select>
        </div>
        <div class="Type">
            <select name="" id="typeDropdown" onchange="getSelectedType()">
                <option value="">Type</option>
                <option value="All">All</option>
                <option value="Car">Car</option>
                <option value="Truck">Truck</option>
            </select>
        </div>
    </div>

    <div class="" id="dropDownSelection">

    </div>

</body>

推荐答案

也许你可以看看这段代码

// JAVASCRIPT

....

const getSelected = () => {
  let typeSelection = document.getElementById('typeDropdown').value;
  let brandSelection = document.getElementById('brandDropdown').value;
  let selection = document.getElementById('dropDownSelection');
  // Show all cars
  if (brandSelection === 'All' && typeSelection === 'All') {
    selection.innerHTML = '';
    Data.forEach((car) => {
      selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
    });
  }
  // Show selected brand
  else if (brandSelection !== 'All' && typeSelection === 'All') {
    selection.innerHTML = '';
    Data.filter((car) => car.brand === brandSelection).forEach((car) => {
      selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
    });
  // Show selected type
  } else if (brandSelection === 'All' && typeSelection !== 'All') {
    selection.innerHTML = '';
    Data.filter((car) => car.type === typeSelection).forEach((car) => {
      selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
    });
  // show selected brand and type
  } else {
    selection.innerHTML = '';
    Data.filter(
      (car) => car.brand === brandSelection && car.type === typeSelection,
    ).forEach((car) => {
      selection.innerHTML += `<div class="car">
                <h3>${car.brand}</h3>
                <p>${car.type}</p>
                <p>${car.model}</p>
                <p>${car.year}</p>
                <p>${car.price}</p>
            </div>`;
    });
  }
};

....
// HTML

....

<div class="dropDown">
  <div class="Brand">
    <select name="" id="brandDropdown" onchange="getSelected()">
      <option value="All">All</option>
      <option value="Volkswagen">Volkswagen</option>
      <option value="Mazda">Mazda</option>
      <option value="Tesla">Tesla</option>
    </select>
  </div>
  <div class="Type">
    <select name="" id="typeDropdown" onchange="getSelected()">
      <option value="">Type</option>
      <option value="All">All</option>
      <option value="Car">Car</option>
      <option value="Truck">Truck</option>
    </select>
  </div>
</div>

....

正如您可以看到的,2下拉列表只调用一个函数getSelected(),这是因为如果您执行2个过滤器,则必须将它们彼此组合在一起,而不是分离为2个函数.我希望这将有助于谢谢你

Javascript相关问答推荐

JS生成具有给定数字和幻灯片计数的数组子集

使用print This时, map 容器已在LeafletJS中初始化

使用JavaScript重新排序行

如何禁用附加图标点击的v—自动完成事件

当运行d3示例代码时,没有显示任何内容

将核心模块导入另一个组件模块时存在多个主题

Reaction组件在本应被设置隐藏时仍显示

将数组扩展到对象中

如何在JAVASCRIPT中合并两组对象并返回一些键

向数组中的对象添加键而不改变原始变量

为什么我的按钮没有从&q;1更改为&q;X&q;?

Google脚本数组映射函数横向输出

处理app.param()中的多个参数

背景动画让网站摇摇欲坠

如何修复使用axios运行TSC index.ts时出现的错误?

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

AstroJS混合模式服务器终结点返回404

使用Java脚本替换字符串中的小文本格式hashtag

JSX/React -如何在组件props 中循环遍历数组

由于http.get,*ngIf的延迟很大