【问题标题】:JS needs to return all values ​when selecting the "все" optionJS在选择“все”选项时需要返回所有值
【发布时间】:2021-10-06 20:06:20
【问题描述】:

代码中的问题是:我想不出如何在选择“все”选项时返回所有元素 如果有任何帮助,我将不胜感激

 <div class="filter-box">
                <div class="select-box">
                    <label class="filter-label">Категория</label>
                    <select id="cats" class="select-control">
                        <option value="0">Все</option>
                        <option value="1">Завтраки</option>
                        <option  value="2">Первые блюда</option>
                        <option  value="3">Гарниры</option>
                    </select>
                </div><!-- /.select-box -->
                <div class="price-select-box">
                    <label class="filter-label">Цена</label>
                    <select id="price" class="select-control">
                        <option value="0">Все</option>
                        <option value="30">До 30 грн</option>
                        <option value="50">До 50 грн</option>
                        <option value="100">До 100 грн</option>
                        <option value="150">До 150 грн</option>
                    </select>
                </div><!-- /.price-select-box -->
            </div>
<div id="products" class="products-box grid-box "> </div>

const products = document.getElementById("products");
const catsSel = document.getElementById("cats");
const priceSel = document.getElementById("price");
document.addEventListener('change', handleChange)
function handleChange(e) {
  const {target} = e;
  if(target.id !== "cats" && target.id !== "price") {
  return;
}
const selectedCat = parseInt(catsSel.value)
const selectedPrice = parseInt(priceSel.value)
const data = defaultData.products.filter((item) => {
  return (
    (selectedCat === -1 || item.cid === selectedCat) &&
    (selectedPrice === -1 || item.price <= selectedPrice) 
  )
})

render(data)

}


var defaultData = {
    cats: [
      { id: 1, title: "Все" },
      { id: 2, title: "Завтраки" },
      { id: 3, title: "Первые блюда" },
      { id: 4, title: "Гарниры" }
    ],
    products: [
      {
        id: 1,
        cid: 1,
        title: "Овсяная каша с фруктами",
        im: "<img class='img-fluid' src='i/im1.jpg'>",
        price: 30
      },
      {
        id: 2,
        cid: 1,
        title: "Яичница глазунья с овощами на сковородке",
        im: "<img class='img-fluid' src='i/im2.jpg'>",
        price: 25
      },
      {
        id: 3,
        cid: 1,
        title: "Сет азербайджанский завтрак",
        im: "<img class='img-fluid' src='i/im3.jpg'>",
        price: 10
      },
      {
        id: 4,
        cid: 4,
        title: "Яичница с помидорами по-бакински",
        im: "<img class='img-fluid' src='i/im4.jpg'>",
        price: 28
      },
      { id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
      { id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
      { id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
      { id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
      { id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
      {
        id: 10,
        cid: 2,
        title: "Суп Соютма из ягненка",
        im: "<img class='img-fluid' src='i/im10.jpg'>",
        price: 150
      },
      { id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
      {
        id: 12,
        cid: 3,
        title: "Картофель по-домашнему",
        im: "<img class='img-fluid' src='i/im12.jpg'>",
        price: 45
      }
    ],
  };
  
  var renderCats = defaultData.cats.reduce((acc, item) => {
    acc[item.id] = item;
    return acc;
  }, {});

这里是所有代码https://codesandbox.io/s/affectionate-albattani-s0snm?file=/src/index.js

只有一个错误,由于某种原因,该变量在数据文档中不可见

【问题讨论】:

    标签: javascript html select option


    【解决方案1】:

    应为 0(“все” 选项的值)

        (selectedCat === 0
        (selectedPrice === 0
    

    const products = document.getElementById("products");
        const catsSel = document.getElementById("cats");
        const priceSel = document.getElementById("price");
        document.addEventListener('change', handleChange)
        function handleChange(e) {
          const {target} = e;
          if(target.id !== "cats" && target.id !== "price") {
          return;
        }
        const selectedCat = parseInt(catsSel.value)
        const selectedPrice = parseInt(priceSel.value)
        const data = defaultData.products.filter((item) => {
          return (
            (selectedCat === 0 || item.cid === selectedCat) &&
            (selectedPrice === 0 || item.price <= selectedPrice) 
          )
        })
    
        if (data.length !== 0) { render(data) }
        
        }
    
    function render(data) {
      let output = '';
      for (const item of data) {
        output += item.im;
      }
      document.getElementById("render-box").innerHTML = output;
    }
    
        var defaultData = {
            cats: [
              { id: 1, title: "Все" },
              { id: 2, title: "Завтраки" },
              { id: 3, title: "Первые блюда" },
              { id: 4, title: "Гарниры" }
            ],
            products: [
              {
                id: 1,
                cid: 1,
                title: "Овсяная каша с фруктами",
                im: "<img class='img-fluid' src='i/im1.jpg'>",
                price: 30
              },
              {
                id: 2,
                cid: 1,
                title: "Яичница глазунья с овощами на сковородке",
                im: "<img class='img-fluid' src='i/im2.jpg'>",
                price: 25
              },
              {
                id: 3,
                cid: 1,
                title: "Сет азербайджанский завтрак",
                im: "<img class='img-fluid' src='i/im3.jpg'>",
                price: 10
              },
              {
                id: 4,
                cid: 4,
                title: "Яичница с помидорами по-бакински",
                im: "<img class='img-fluid' src='i/im4.jpg'>",
                price: 28
              },
              { id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
              { id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
              { id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
              { id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
              { id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
              {
                id: 10,
                cid: 2,
                title: "Суп Соютма из ягненка",
                im: "<img class='img-fluid' src='i/im10.jpg'>",
                price: 150
              },
              { id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
              {
                id: 12,
                cid: 3,
                title: "Картофель по-домашнему",
                im: "<img class='img-fluid' src='i/im12.jpg'>",
                price: 45
              }
            ],
          };
          
          var renderCats = defaultData.cats.reduce((acc, item) => {
            acc[item.id] = item;
            return acc;
          }, {});
    <div class="filter-box">
                        <div class="select-box">
                            <label class="filter-label">Категория</label>
                            <select id="cats" class="select-control">
                                <option value="0">Все</option>
                                <option value="1">Завтраки</option>
                                <option  value="2">Первые блюда</option>
                                <option  value="3">Гарниры</option>
                            </select>
                        </div><!-- /.select-box -->
                        <div class="price-select-box">
                            <label class="filter-label">Цена</label>
                            <select id="price" class="select-control">
                                <option value="0">Все</option>
                                <option value="30">До 30 грн</option>
                                <option value="50">До 50 грн</option>
                                <option value="100">До 100 грн</option>
                                <option value="150">До 150 грн</option>
                            </select>
                        </div><!-- /.price-select-box -->
                    </div><!-- /filter-box-->
                    <div id="render-box"></div>

    【讨论】:

    • 在示例代码或编辑器中都不起作用
    • 我添加了一个截图。你有什么问题?
    • "все" 选项的主要问题尚未解决,程序应返回所有 12 个对象
    • 条件应该是 все 还是两者都 все?
    • "Все" 翻译为all。第一个过滤器是菜肴的类别,第二个过滤器是价格。如果在第一个输入和第二个输入中选择了“все”,则应返回所有 12 个 id。如果只在第一个“все”和第二个 100грн 中。那么它应该在所有菜肴中搜索最多 100 道菜。反之亦然。如果选择了一道菜,并且在第二个输入“все”中,则应返回这些菜的所有 сid。
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2020-08-23
    • 2013-02-04
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多