.data () возвращает неопределенный - PullRequest
0 голосов
/ 16 мая 2018

Это мой код:

$.getJSON("link here", function (result) {
    $.each(result, function (i, value) {
        $('.usersOfGroupList').append($("<li id='userElement' data-userId='' ></li>").data('userIdFromGroups', value.Id).html(value.FirstName + " " + value.LastName));
        console.log($(".usersOfGroupList").data());
    });
});

Значение в методе данных правильно хранит данные, но когда я пытаюсь зарегистрировать это значение в своей консоли, я получаю весь объект javascript, когда простохочу значение D. Я также пытался с ключом, как это:

console.log($(".usersOfGroupList").data("userIdFromGroups"));

, но это просто дает мне

undefined-error

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Похоже, что вы передаете данные недавно созданному <li> в .usersOfGroupList, поэтому вам нужно использовать следующее для правильного получения

$("#userElement").data("userIdFromGroups")

Кроме того, в приведенном выше коде создается впечатление, что вы создаете несколько элементов с одинаковыми идентификаторами, что является очень плохой практикой.Теоретически, если есть только один <li>, он будет работать.

Если этого не произойдет, это означает, что у вас плохая обработка асинхронных действий.

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

0 голосов
/ 16 мая 2018

id должен быть уникальным для каждого элемента, поэтому удалите атрибут id из li.

Поскольку вы добавляете атрибут данных во вновь созданный li, вам необходимо использовать li какселектор и :eq(index) для получения правильного li каждый раз.

Сделайте, как показано ниже: -

console.log($(".usersOfGroupList li:eq("+i+")").data('userIdFromGroups'));

Пример жесткого кода: -

result = [{'Id':1,'FirstName':'A','LastName':'B'},{'Id':2,'FirstName':'C','LastName':'D'}];


$.each(result, function (i, value) {
  $('.usersOfGroupList').append($("<li data-userId='' ></li>").data('userIdFromGroups', value.Id).html(value.FirstName + " " + value.LastName));
  console.log($(".usersOfGroupList li:eq("+i+")").data('userIdFromGroups'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="usersOfGroupList">

Полный код должен быть: -

$.getJSON("link here", function (result) {
    $.each(result, function (i, value) {
        $('.usersOfGroupList').append($("<li data-userId='' ></li>").data('userIdFromGroups', value.Id).html(value.FirstName + " " + value.LastName));// remove repetitive id
        console.log($(".usersOfGroupList li:eq("+i+")").data('userIdFromGroups')); // use index i to get correct li data
    });
});
...