Сортировка срабатывает только после 2-го нажатия

HTML:

<div class="sorting">
 <div class="sort-by">Сортировать по:</div>
 <div class="sorting-sections">
  <div class="sort-prices sort">
   <div class="prise-sort-min-max" id="price" onclick="priseSort()">Цена</div>
  </div>
  <div class="sort-prices sort" >
   <div class="weight-sort-min-max" id="weight" onclick="weightSort()">Вес</div>
  </div>
  <div class="sort-prices sort">
   <div class="wiews-sort-min-max" id="wiews" onclick="wiewsSort()">Популярность</div>
  </div>
 </div>
</div>

Этот кусок срабатывает при загрузке страницы и вроде не вызывает проблем:

function defSort() {
  cards.sort(function (a, b) {
    return a.id - b.id;
  });

  console.log(myarray);
}
render();


//Но при нажатии на div с этой частью начинаются проблемы, в теории карточки товаров должны отсортировываться, но это происходит только после 2-го нажатия.


function wiewsSort() {
  if (document.getElementById("wiews").className == "wiews-sort-min-max") {
    $(".wiews-sort-min-max").click(function defSort() {
      cards.sort(function (a, b) {
        return b.wiews - a.wiews;
      });
      $("#wiews").removeClass("wiews-sort-min-max");
      $(this).addClass("wiews-sort-max-min");

      console.log(myarray);
    });
  } else {
    $(".wiews-sort-max-min").click(function defSort() {
      cards.sort(function (a, b) {
        return a.wiews - b.wiews;
      });
      $("#wiews").removeClass("wiews-sort-max-min");
      $(this).addClass("wiews-sort-min-max");

      console.log(myarray);
    });
  }
  render();
}


Ответы (1 шт):

Автор решения: Алексей Шиманский

Навешивание обработчика клика на wiews-sort-min-max и wiews-sort-max-min происходит только после нажатия на див. Причём каждый клик на див и вызов wiewsSort будет навешивать всё больше и больше кликов на те классы. Нужно вынести навешивание кликов вне функции, а в внутри функции wiewsSort нужно при условии просто триггерить клик .trigger('click')

→ Ссылка