Передать имя класса в функцию

У меня есть разные «Профили» в Json-файле. В index.html отображаются различные карточки профиля, которые заполняются информацией из Json-файла. Когда вы нажимаете на профиль (Profil-Card), будет загружен подробный файл profile.html и будет выполнена функция initateProfile.

 $(document).on("click", ".profile-card", function () {
    $('#page-content').load("sections/profile.html", function () {
       initiateProfile($(this).data("profileid"));
    });
 });

Я хочу передать содержимое класса profileid, который является индексом для Json-файла.

function initiateProfile(id) {
  var profile_data;

  $.getJSON('data/profiles.json', function (data) {
     profile_data = data[id];
     $('.trn-name').text(profile_data.name);
     $('.trn-studies').text(profile_data.studies);
     $('.trn-stage').text(profile_data.stage);
  });
}

К сожалению, переменная id не определена. Таким образом, функция не может получить информацию о Json-файле. В чем проблема?

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предполагая, что атрибут data-profileid определен для элемента, который имеет класс .profile-card:

Ваша проблема this.

$(document).on("click", ".profile-card", function () {
  $('#page-content').load("sections/profile.html", function () {
    initiateProfile($(this).data("profileid")); // "this" points to the element with id "page-content"
  });
});

Одним из решений было бы использование event.currentTarget:

$(document).on("click", ".profile-card", function (event) {
  $('#page-content').load("sections/profile.html", function () {
    initiateProfile($(event.currentTarget).data("profileid"));
  });
});
Ответ принят как подходящий

Проблема в том, что this в функции обработчика обратного вызова load() не является элементом, вызвавшим событие. Он работает под другой областью действия. Чтобы исправить это, вам нужно сохранить ссылку на элемент в переменной в области действия обработчика click и использовать ее в обратном вызове, примерно так:

$(document).on("click", ".profile-card", function () {
  var profileId = $(this).data('profileid');
  $('#page-content').load("sections/profile.html", function () {
    initiateProfile(profileId);
  });
});

Другие вопросы по теме