Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.03.2022, 11:05
Интересующийся
Отправить личное сообщение для Dmitry1988 Посмотреть профиль Найти все сообщения от Dmitry1988
 
Регистрация: 24.08.2021
Сообщений: 10

простой вопрос по json
Здравствуйте, нужна помощь. Функция выводит на экран товары из файла json. В каждой ячейке товара есть кнопка "купить", к ней привязана функция "buy". Помогите получить значение "cost" соответствующего товара из json при вызове функции "buy".
Код:

function goodsOut(data) {
// вывод на страницу
console.log(data);
var out='';
for (var key in data) {


out+='<div class="single-goods", "col-md-3" id="'+data[key].type+'">';
out+='<a href="'+data[key].link+'"> <h3 class="goodName">'+data[key]['name']+'</h3></a>';
out+='<p>'+data[key]['description']+'</p>';
out+='<a href="'+data[key].link+'"><img src="'+data[key].image+'"></a>';
out+='<div class="row">';
out+='<div class="col-md-6","col-sm-12">';
out+='<p class="price">Цена: '+data[key]['cost']+'&nbsp₽'+'</p>';
out+='</div>';
out+='<div class="col-md-6","col-sm-12">';
out +=`<button class="add-to-cart" data-id="${key}">Купить</button>`;
out+='<p class="incart"> В корзине </p>';
out+='</div>';
out+='</div>';
out+='</div>';

}

$('#goods').html(out);
$('#goods2').html(out);
$('#goods3').html(out);
$('#goods4').html(out);
$('#goods5').html(out);
$('#goods6').html(out);
$('.add-to-cart').on('click', buy);
}
Ответить с цитированием
  #2 (permalink)  
Старый 04.03.2022, 11:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Dmitry1988,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 04.03.2022, 11:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Dmitry1988,
примерно так...
out +=`<button class="add-to-cart" data-id="${JSON.stringify(data[key])}">Купить</button>`;

let buy = function() {
let obj = this.dataset.id;
let {cost} = JSON.parse(obj);
alert(cost);

}
Ответить с цитированием
  #4 (permalink)  
Старый 04.03.2022, 12:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Можно ведь сразу записать значение cost в свой data-аттрибут...
Тогда ничего парсить не нужно.
Ответить с цитированием
  #5 (permalink)  
Старый 04.03.2022, 16:45
Интересующийся
Отправить личное сообщение для Dmitry1988 Посмотреть профиль Найти все сообщения от Dmitry1988
 
Регистрация: 24.08.2021
Сообщений: 10

спасибо за помощь, уточню вопрос:

"a" : {
    "name" : "coca-cola",
    "cost" : 50,
    "description" : "описание товара 1",
    "image" : "img/Coca-Cola.jpg",
    "type" : "drink",
    "link" : "goods/tb-1.html"
  },
[/json]

[js]
function buy() {
    var id = $(this).attr('data-id');
     console.log(id);

в данном случае функция buy возвращает "a", мне требуется получить значение "cost", как это сделать? Использовать cost как id не вариант.
Ответить с цитированием
  #6 (permalink)  
Старый 04.03.2022, 17:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Dmitry1988,
чем пост #3 не устроил?
Ответить с цитированием
  #7 (permalink)  
Старый 04.03.2022, 17:07
Интересующийся
Отправить личное сообщение для Dmitry1988 Посмотреть профиль Найти все сообщения от Dmitry1988
 
Регистрация: 24.08.2021
Сообщений: 10

консоль ругается на эту строчку
let {cost} = JSON.parse(obj);
Uncaught SyntaxError: Unexpected token d in JSON at position 0
Ответить с цитированием
  #8 (permalink)  
Старый 04.03.2022, 17:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Dmitry1988,
кликать на купить, строка 47 смотрите кавычки
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $(function() {
            let data = {
                "a": {
                    "name": "coca-cola",
                    "cost": 50,
                    "description": "описание товара 1",
                    "image": "img/Coca-Cola.jpg",
                    "type": "drink",
                    "link": "goods/tb-1.html"
                }
            }
            let buy = function() {
                let obj = this.dataset.id;
                let {
                    cost,name
                } = JSON.parse(obj);
                alert([name,cost]);

            }

            function goodsOut(data) {
                // вывод на страницу
                console.log(data);
                let out = '';
                for (let key in data) {


                    out += '<div class="single-goods", "col-md-3" id="' + data[key].type + '">';
                    out += '<a href="' + data[key].link + '"> <h3 class="goodName">' + data[key]['name'] + '</h3></a>';
                    out += '<p>' + data[key]['description'] + '</p>';
                    out += '<a href="' + data[key].link + '"><img src="' + data[key].image + '"></a>';
                    out += '<div class="row">';
                    out += '<div class="col-md-6","col-sm-12">';
                    out += '<p class="price">Цена: ' + data[key]['cost'] + '&nbsp₽' + '</p>';
                    out += '</div>';
                    out += '<div class="col-md-6","col-sm-12">';
                    out += `<button class="add-to-cart" data-id='${JSON.stringify(data[key])}'>Купить</button>`;
                    out += '<p class="incart"> В корзине </p>';
                    out += '</div>';
                    out += '</div>';
                    out += '</div>';

                }

                $('#goods').html(out);
                $('.add-to-cart').on('click', buy);
            }
            goodsOut(data)


        });
    </script>
</head>

<body>
    <div id="goods"></div>
</body>

</html>
Ответить с цитированием
  #9 (permalink)  
Старый 04.03.2022, 17:16
Интересующийся
Отправить личное сообщение для Dmitry1988 Посмотреть профиль Найти все сообщения от Dmitry1988
 
Регистрация: 24.08.2021
Сообщений: 10

спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу установить чекбокс. простой вопрос sany531 jQuery 6 21.02.2014 20:21
Простой вопрос по действию функции copperfox Общие вопросы Javascript 3 16.07.2013 12:40
Не могу найти ответ на простой вопрос lukingnu jQuery 2 25.11.2010 17:03
Простой вопрос - как запросить страницу НЕ ИЗ кэша kefi AJAX и COMET 1 20.09.2010 15:26
Простой вопрос - надо из скрипта перейти на ссылку Brother Общие вопросы Javascript 1 27.02.2008 09:50