не работает javascript после ajax

327
09 апреля 2019, 05:00

JS только изучаю. После загрузки (по клику кнопки) дополнительных карточек товара с помощью Ajax, на них перестает работать Javascript, в том числе сортировка. Как я понял, это происходит из-за того, что js сработал после загрузки страницы, а так как ajax страницу не перезагружает, то и нет эффекта на новых элементах. Не могу понять что надо подправить.

document.querySelector('.main-page__button').onclick = function() {
let showMore = function(data) {
    let list = $('.appartments')
     data.forEach(item => {
      let card =
        `<article class="appartments-item" tabindex="0">
          <div class="appartments-item__img-wrap">
            <img src="${item.img}" alt="план квартиры" class="appartments-item__img" title="${item.name}">
          </div>`
      list.append(card)
    })
  }
  $.ajax('https://api.myjson.com/bins/6dbie')
    .done(data => {
    showMore(data)
  })
    .fail(function() {
    alert('error');
  })};

А это должно работать на новых элементах Ajax

    $('.appartments-item__star').on('click', function() {
  if ($(this).attr('click-state') == 1) {
    $(this).attr('click-state', 0)
    $(this).css({'background-position':'-10px -10px'})
  } else {
    $(this).attr('click-state', 1)
    $(this).css({'background-position':'-50px -10px'})
  }
});

И сортировка

var items = document.querySelectorAll('.appartments-item');
var parent = document.querySelector('.appartments');
var SortElements = new Object();
items.forEach(function(item, indx){
  var itemValue = parseInt(item.querySelector('.appartments-item__price');
  SortElements[itemValue] = {'element': item, 'index': indx} ;
});
var keys = Object.keys(SortElements);
function compareNumeric(a, b) {
  a = parseInt(a);
  b = parseInt(b);
  if (a < b) return 1;
  if (a > b) return -1;
}
keys.sort(compareNumeric);
keys.map(function(key, indx){
  parent.insertAdjacentElement('beforeend', SortElements[key]['element']);
});
Answer 1

После добавления новых элементов через аякс, вызовите функцию назначающию onclick и т.п эвенты. И функцию создающею массив для сортировки. Вобщем оформите весь этот код в функции и вызывайте снова и снова при загрузке, страницы, а затем аяксов.

READ ALSO
Pattern в input элементе [закрыт]

Pattern в input элементе [закрыт]

мне нужно паттерн чтобы пользователь мог вывести только (1-100) потом + потом (1 или к или кк) )

171
Viber chat links/buttons для сайта

Viber chat links/buttons для сайта

Столкнулся с такой проблемой, что для Android и iOS код отличается

143
Как происходит сортировка в MySQL с помощью ORDER BY

Как происходит сортировка в MySQL с помощью ORDER BY

Сортировка в не сколько столбцов происходит же таким образом :

156