простой вопрос по 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']+' ₽'+'</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); } |
Dmitry1988,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
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);
}
|
Можно ведь сразу записать значение cost в свой data-аттрибут...
Тогда ничего парсить не нужно. |
спасибо за помощь, уточню вопрос:
"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 не вариант. |
Dmitry1988,
чем пост #3 не устроил? |
консоль ругается на эту строчку
let {cost} = JSON.parse(obj); Uncaught SyntaxError: Unexpected token d in JSON at position 0 |
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'] + ' ₽' + '</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>
|
спасибо :thanks:
|
| Часовой пояс GMT +3, время: 05:34. |