Как восстановить .data элемента, который был нажат? (javascript, банкомат не работает)

В настоящее время я работаю над онлайн-проектом, который представляет собой игру Таро (карточная игра) в одностраничном приложении. И дело в том, чтобы играть, игроку нужно щелкнуть по карте, которая в моем случае представляет собой img, и он должен выполнить функцию, получая данные, которые я вставил ранее, когда я динамически генерировал карты.

Однако, когда я пытаюсь щелкнуть, функция вызывает функцию, но вместо ожидаемых данных я получаю console.info () undefined.

Вот мой код для создания карты:

let ajouterImageCarte = function (carte, destination) {
        let img = $('<img />');
        $(destination).append(
            img.attr("src", carte.url)
                .attr("class", "imageCarte")
                .data("valeur", carte.valeur)
                .data("couleur", carte.couleur)
                .data("nom", carte.nom)
                .click(clickImgage)
        );
    };

А вот функция, вызываемая после щелчка:

let clickImgage = function () {
        $.ajax({
            url: '/php/json/getTourEtatJeu.php'
        })
            .done(function (dataEtat) {
                if (dataEtat.isMonTour && "chien" === dataEtat.etatPartie) {
                    console.info("yes");
                    if (1<2) {
                        let nom = $(this).data("nom");
                        console.info(nom);
                        let carte = new Carte(nom);
                        chien.push(carte);
                        $(this).fadeOut(function () {
                            let img = $('<img />');
                            $('#plateau').append(
                                img.attr("src", carte.url)
                                    .attr("class", "imageCarte")
                                    .data("valeur", carte.valeur)
                                    .data("couleur", carte.couleur)
                                    .data("nom", carte.nom)
                                    .click(clickImgage)
                            );
                        })
                    }
                    else {
                        console.info("no");
                    }
                }
                else if (dataEtat.isMonTour && "jeuEnCours" === dataEtat.etatPartie) {

                }
            })
            .fail(function () {
                alert("Problème survenu lors du clic sur une carte !!");
            });
        return false;
    };

Важная часть функции находится в начале, после вызова ajax, где я пытаюсь выполнить console.info (nom), который имеет значение let nom = $ (this) .data ("nom") ;.

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

Заранее спасибо :)

попробуйте .attr("data")

Andrei Shostik 18.03.2018 11:44
Поведение ключевого слова "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
1
23
2

Ответы 2

есть некоторые непонятные мне проблемы с извлечением методом .data() с помощью jquery

  1. в большинстве случаев нормально работает только .data()
  2. вы можете попробовать метод .attr("data-valeur") с опцией 'data'
  3. вы также можете напрямую использовать свойство .dataset из элемента html

В вашем обратном вызове this не ссылается на изображение, по которому щелкнули, как вы ожидали. Смотрите ответы здесь: $ (this) внутри успеха AJAX не работает

Спасибо, я собираюсь проверить это

Vincent Mazel 18.03.2018 12:33

Хорошо, спасибо, теперь он работает после добавления контекста в ajax. Ты спас мне день;)

Vincent Mazel 18.03.2018 12:35

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