Почему моя панель поиска не работает? Javascript - Веб - PullRequest
0 голосов
/ 03 мая 2020

Я создаю веб-приложение для недвижимости. Я собираюсь закончить sh это, но я застрял на этой последней вещи. Я добавил панель поиска на своей домашней странице, которая позволяет пользователю фильтровать свойства по городу, аренде / продаже, минимальным комнатам / максимальным комнатам, минимальной цене и максимальной цене. Мне интересно, почему панель поиска не работает? Это моя строка поиска:

<!-- Search Section -->
        <form class="col s8 l1" onsubmit="filteredPrices(li)">
            <div class="row">
                <div class="input-field col s4 l2">
                    <select class="all-cities">
                      <option value="">Choose...</option>
                      <option value="1">Adana</option>
                      <option value="2">Adıyaman</option>
                      <option value="3">Afyonkarahisar</option>
                      <option value="4">Ağrı</option>
                    </select>
                </div>
                <div class="input-field col s4 l2">
                    <select class="rent-sale" >
                        <option value="0">Type</option>
                        <option value="Rent">Rent</option>
                        <option value="Sale">Sale</option>
                    </select>
                </div>

                <div class="input-field col s5 l2">
                    <select class="min-rooms">
                        <option value="0">Min Rooms</option>
                        <option value="1">1</option>  
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                    </select>
                </div>
                <div class="input-field col s5 l2">
                    <select class="max-rooms">
                        <option value="0">Max Rooms</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                    </select>
                </div>
                <div class="input-field col s4 l2">
                    <input type="text" id="min" placeholder="Min price $">
                </div>
                <div class="input-field col s4 l2">
                    <input type="text" id="max" placeholder="Max price $">
                </div> 

            </div>
            <button class="btn waves-effect indigo right" type="submit">Search
                <i class="material-icons right">send</i>
              </button>
        </form><!-- ./Search Section -->

И вот где я добавляю свойства из облачного пожарного магазина на мою домашнюю страницу:

const setupProp = data => {
  let html = '';
  data.forEach(doc => {
    const info = doc.data();
    let li = `
    <div class="col s12 l4 items">
      <div class="card" style="height: 407px;">
        <div class="card-image">
          <a href="property.html?${doc.id}">
          <img src="${info.image[0]}" style="height: 228px;"></a>
          <a class="btn-floating halfway-fab waves-effect waves-light red center status">${info.type}</a>
        </div>
        <div class="card-content">
          <span><b class="house-title">${info.title}</b></span><br>
          <span><b class="blue-text price">${info.price}</b> &#36;</span><br>
          <span class="material-icons blue-text">room</span>
          <span><b class="city">${info.city}</b></span><br>
          <span class="material-icons blue-text">single_bed</span>
          <span><b class="rooms">${info.rooms}</b> rooms</span>
        </div>
      </div>
  </div>
    `;
    filteredPrices(li)
    html += li

    showingProp.innerHTML = html; 
  })
}

И, наконец, вот мой js поиск код:

const filteredPrices = li => {
            const searchMin = Number(document.getElementById('min').value); // Min price search tap
            const searchMax = Number(document.getElementById('max').value); // Max price search tap
            const rentSale = document.querySelector('.rent-sale').value; // Rent/Sale search tap
            const allCities = document.querySelector('.all-cities').value; // City search tap
            const minRooms = document.querySelector('.min-rooms').value; // Min rooms search tap
            const maxRooms = document.querySelector('.max-rooms').value; // Max rooms search tap

            const str = li;
            const temp = document.createElement('div');
            temp.innerHTML = str;
            // console.log(temp)
            const items = temp.querySelectorAll('.items');
            items.forEach(item => {
                const price = Number(item.querySelector('.price').textContent);
                const status = item.querySelector('.status').textContent;
                const city = item.querySelector('.city').textContent;
                const rooms = Number(item.querySelector('.rooms').textContent);

                if (price < searchMin || price > searchMax || rentSale !== status || allCities !== city
                        || rooms < minRooms || rooms > maxRooms) {
                        item.style.display = 'none';
                        // document.querySelector('.error').style.display = "block";
                        } else
                        item.style.display = 'block';
            })            
}

1 Ответ

0 голосов
/ 04 мая 2020

В приложении. js вы объявляете li в ограниченной области, вы объявляете его в setupProp (), поэтому переменная действительна только для области setupProp (). Объявите это вне setupProp () и вне любой другой функции, чтобы переменная могла быть видна глобально. Радоваться, веселиться! MDN let PS В следующий раз не забудьте сообщить об ошибке, которую он вам дает, в противном случае предстоит гораздо больше работы, уведомив о точной ошибке, проблема ограничена! приложение. js код:

const loggedOutLinks = document.querySelectorAll('.logged-out');
const loggedInLinks = document.querySelectorAll('.logged-in');
const showingProp = document.querySelector('.showing-prop');
const propShow = document.querySelector('.all-properties');

const setupUI = (user) => {
  if (user) {
    loggedInLinks.forEach(item => item.style.display = 'block');
    loggedOutLinks.forEach(item => item.style.display = 'none');
  } else {
    loggedInLinks.forEach(item => item.style.display = 'none');
    loggedOutLinks.forEach(item => item.style.display = 'block');
  }
}

let li; //DECLARE li AS GLOBAL, NOT LOCAL INSIDE A FUNCTION
// Displaying the properties to the HomePage
const setupProp = data => {
  let html = '';
  data.forEach(doc => {
    const info = doc.data();
    li = `
    <div class="col s12 l4 items">
      <div class="card" style="height: 407px;">
        <div class="card-image">
          <a href="property.html?${doc.id}">
          <img src="${info.image[0]}" style="height: 228px;"></a>
          <a class="btn-floating halfway-fab waves-effect waves-light red center status">${info.type}</a>
        </div>
        <div class="card-content">
          <span><b class="house-title">${info.title}</b></span><br>
          <span><b class="blue-text price">${info.price}</b> &#36;</span><br>
          <span class="material-icons blue-text">room</span>
          <span><b class="city">${info.city}</b></span><br>
          <span class="material-icons blue-text">single_bed</span>
          <span><b class="rooms">${info.rooms}</b> rooms</span>
        </div>
      </div>
  </div>
    `;
    filteredPrices(li)
    html += li

    showingProp.innerHTML = html; 
  })
}


// Displaying the properties to the Properties Page(Subpage)
const setupSub = data => {

  const id = window.location.href.split('?')[1];
  data.forEach(doc => {
    if(doc.id === id) {
    let info = doc.data();
    const images = info.image.map(img => {
      return `
         <a href="#" class="carousel-item">
            <img src=${img} alt="istanbul"  style="height: 390px;">
         </a>
      `;
});
    let html = `
    <div class="row" >
            <div class="col l6 s12 m12">
                <div class="carousel carousel-slider" data-indicators ="true" style="border-radius: 5px;">
                ${images.join('')}
                </div>
                  <div class="btn indigo waves-affect prev">Prev</div>
                  <div class="btn indigo waves-affect right next">Next</div>
            </div>
            <div class="col l6 s12 m12">
                <div class="card" style="height: 357px; border-radius: 5px; background-color: #f9f9f9; padding: 10px;">
                      <h5 class="center">${info.title}</h5><br><br>
                      <span style="font-weight: bold;"><span class="blue-text">Price:</span> ${info.price} &#36;</span><br><br>
                      <span><i class="material-icons blue-text">room</i> Located in ${info.city}.</span><br><br>
                      <span><i class="material-icons blue-text">single_bed</i> Total Rooms ${info.rooms}.</span><br><br>

                </div>
            </div>
    </div>
      `;
        // To activate the image slider (Materialize css)
        $(document).ready(function(){
          $('.carousel').carousel();

          // function for next slide
          $('.next').click(function(){
              $('.carousel').carousel('next');
          });

          // function for prev slide
          $('.prev').click(function(){
              $('.carousel').carousel('prev');
          });
  });


      propShow.innerHTML = html;
  }
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...