Как я могу отобразить, какой элемент внутри массива объектов щелкнул пользователь, используя jQuery?

avatar
whenitrainsitpours
1 июля 2021 в 19:35
23
1
0

Я пытаюсь отобразить OfferName при нажатии пользователем на список изображений, каждое из которых имеет свои собственные данные (массив объектов), используя jQuery. Я добился этого с помощью простого JS, но хочу знать, как добиться этого с помощью jQuery.

Как сделать так, чтобы при нажатии пользователем на изображение в консоли появлялся индивидуальный и правильный OfferName? Это меня сильно смутило, хотя я пытался реконструировать простой JS :(.

Можно предположить, что массив объектов выглядит следующим образом:

var offers = [ {
    id: 5933,
    desc: "game",
    OfferName: "blitz",
    Template: "nonfeatured",
    SortIndex: 0
  }, {
    id: 5934,
    desc: "game",
    OfferName: "blitz  - 2",
    Template: "featured",
    SortIndex: 0
  }, {
    id: 5935,
    desc: "game",
    OfferName: "blitz  - 3",
    Template: "special",
    SortIndex: 0
  }];

  $(".items").on("click", function () {
    var offerName = "";

    for(var i = 0; i < offers.length; i++) {
        offerName = offers[i].OfferName;
        $(this).on("click", function (offerName) {
            console.log("user clicked " + offerName);
        });
    }
  }
Источник
Charlie Bamford
1 июля 2021 в 19:40
0

Вы пытаетесь сопоставить список вещей в коде со списком вещей в html. Если вы строите свой html из массива предложений, вы должны включить этот код в свой вопрос. Если нет, вы должны создать свой html из массива предложений.

whenitrainsitpours
1 июля 2021 в 19:42
0

@CharlesBamford, эй, Чарльз, спасибо за ваш вклад. Я просто хочу получить значение, на которое нажал пользователь, я не пытаюсь делать что-либо с помощью html.

Charlie Bamford
1 июля 2021 в 19:44
0

Между offers и вещами с классом .items должна быть какая-то связь, чтобы ваш код работал надежно. Я не понимаю, как можно определить эти отношения, как указано в вашем вопросе.

Ответы (1)

avatar
Kinglish
1 июля 2021 в 19:43
0

Не знаю, как вы строите свой HTML, но вы можете достичь своей цели, используя атрибуты данных и делегирование событий

Вот пример

var offers = [{
  id: 5933,
  desc: "game",
  OfferName: "blitz",
  Template: "nonfeatured",
  SortIndex: 0
}, {
  id: 5934,
  desc: "game",
  OfferName: "blitz  - 2",
  Template: "featured",
  SortIndex: 0
}, {
  id: 5935,
  desc: "game",
  OfferName: "blitz  - 3",
  Template: "special",
  SortIndex: 0
}];

offers.forEach(o => {
  let t = `<div class='tpl item' data-offername='${o.OfferName}' data-id='${o.id}'>Click on this if you're interested in ${o.OfferName}</div>`;
  $('.container').append(t);
})

$(document).on("click", ".item", function() {
  console.log(`user clicked: ${$(this).data('offername')}, id: ${$(this).data('id')}`);
})
.item {
  padding: 5px;
  margin-bottom: 5px;
  cursor: pointer;
  border: 1px solid #ccc;
  background: #f0f0f0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='container'></div>