Передача значения переменной - JavaScript
Всем привет, изучаю джаваскрипт и столкнулся с проблемой, не могу передать значение с одного фала в другой.
Собственно сам код выложу ниже, в чем суть проблему , есть перменная "values" - сумма всех товаров в рублях, ее нужно передать в форму оплаты Яндекс Денег , то есть вот сюда <input id="target" type="text" readonly name="sum"> Пробовал передавать таким способом input = document.getElementById('target'); target.value =values;" но ничего не вышло, хотя если я этот код прикреплю в начале файла в таком виде values = 0; input = document.getElementById('target'); target.value =values;" то все работает отлично, может я как-то с областью видимости косячу, код привожу ниже? Заранее спасибо. var cart = {}; function loadCart(){ if(localStorage.getItem('cart')){ cart = JSON.parse(localStorage.getItem('cart')); showCart(); } else { $('.main-cart').html('Корзина пуста!'); } function showCart(){ if(!isEmpty(cart)) { $('.main-cart').html('Корзина пуста!'); } else{ $.getJSON('goods.json', function (data){ var goods = data; var out = ''; var values = 0; for(var id in cart){ values += goods[id].cost * cart[id]; out += ` <button data-id="${id}" class="del-goods">x</button> `; out += `<img src="img\\${goods[id].img}">`; out += `${goods[id].name}`; out += ` <button data-id="${id}" class="minus-goods">-</button> `; out += `${cart[id]}`; out += ` <button data-id="${id}" class="plus-goods">+</button> `; out += cart[id]*goods[id].cost; //цена за один товар out += '</br>'; } $('.main-cart').html(out); $('.sums').html(`Общая самма товаров: ${values} рублей.`); $('.del-goods').on('click', delGoods); $('.plus-goods').on('click', PlusGoods); $('.minus-goods').on('click', MinusGoods); }); } } |
Используя var внутри function вы делаете переменную доступной только локально внутри function.
var x = 1; //тут дотупно x function a(){ var y = 2; //тут дотупно x, y function b(){ var z = 3; //тут дотупно x, y, z function c(){ //тут дотупно x, y, но z == undefinded, т.к. ниже использовано var и объявлена локальная z var z = 100500; //тут дотупно x, y, z, где z == 100500, но это никак не влияет на z которая "выше", та всё ещё равна 3, но отсюда уже напрямую не доступна } } } |
Aetae,
Спасибо, объявил переменную в начале файла + добавил присваивание значения самой переменной, но все равно ничего не вышло(( var cart = {}; var values = 0; function loadCart(){ if(localStorage.getItem('cart')){ cart = JSON.parse(localStorage.getItem('cart')); showCart(); } else { $('.main-cart').html('Корзина пуста!'); } function showCart(){ if(!isEmpty(cart)) { $('.main-cart').html('Корзина пуста!'); } else{ $.getJSON('goods.json', function (data){ var goods = data; var out = ''; for(var id in cart){ values += goods[id].cost * cart[id]; out += ` <button data-id="${id}" class="del-goods">x</button> `; out += `<img src="img\\${goods[id].img}">`; out += `${goods[id].name}`; out += ` <button data-id="${id}" class="minus-goods">-</button> `; out += `${cart[id]}`; out += ` <button data-id="${id}" class="plus-goods">+</button> `; out += cart[id]*goods[id].cost; //цена за один товар out += '</br>'; } $('.main-cart').html(out); $('.sums').html(`Общая самма товаров: ${values} рублей.`); $('.del-goods').on('click', delGoods); $('.plus-goods').on('click', PlusGoods); $('.minus-goods').on('click', MinusGoods); input = document.getElementById('target'); //-----> добавил для передачи значения target.value = values; //-----> добавил для передачи значения }); } } function delGoods() { var id = $(this).attr('data-id'); delete cart[id]; saveCart(); showCart(); } function PlusGoods() { var id = $(this).attr('data-id'); cart[id]++; saveCart(); showCart(); } function MinusGoods() { var id = $(this).attr('data-id'); if(cart[id] == 1) { delete cart[id]; } else{ cart[id]--; } saveCart(); showCart(); } function saveCart() { //сохраняем корзину localStorage.setItem('cart', JSON.stringify(cart)); } function isEmpty(object) { for(var key in object) if(object.hasOwnProperty(key)) return true; return false; } } function sendSum(){ input = document.getElementById('target'); target.value = values; } $(document).ready(function(){ loadCart(); $('.sendSum').on('click', sendSum); }); |
Цитата:
input.value = values |
рони,
Спасибо исправил, но к сожалению значение он все равно не передает. вывести нужно в id = "target" значение values, уже все перебрал, но решение так и не смог найти <input type="radio" name="paymentType" value="PC">Яндекс.Деньгами</input> <input type="radio" name="paymentType" value="AC">Банковской картой</input> <input type="radio" name="paymentType" value="MC">С мобильного телефона</input> <input type="hidden" name="successURL" value="http://sait.info/success.php"></input> <input type="text" name="label" placeholder="Логин"> <input id="target" type="text" readonly name="sum"> <input type="submit" name="submit-button" value="Перевести"> var cart = {}; var values = 0; function loadCart(){ if(localStorage.getItem('cart')){ cart = JSON.parse(localStorage.getItem('cart')); showCart(); } else { $('.main-cart').html('Корзина пуста!'); } function showCart(){ if(!isEmpty(cart)) { $('.main-cart').html('Корзина пуста!'); } else{ $.getJSON('goods.json', function (data){ var goods = data; var out = ''; for(var id in cart){ values += goods[id].cost * cart[id]; out += ` <button data-id="${id}" class="del-goods">x</button> `; out += `<img src="img\\${goods[id].img}">`; out += `${goods[id].name}`; out += ` <button data-id="${id}" class="minus-goods">-</button> `; out += `${cart[id]}`; out += ` <button data-id="${id}" class="plus-goods">+</button> `; out += cart[id]*goods[id].cost; //цена за один товар out += '</br>'; } $('.main-cart').html(out); $('.sums').html(`Общая самма товаров: ${values} рублей.`); $('.del-goods').on('click', delGoods); $('.plus-goods').on('click', PlusGoods); $('.minus-goods').on('click', MinusGoods); input = document.getElementById('target'); //-----> добавил для передачи значения input.value = values; //-----> добавил для передачи значения }); } } |
Awrek,
может вы не учитываите, что values формируется после ответа сервера? $('.sums').html(`Общая самма товаров: ${values} рублей.`); -- это работает? |
рони,
Да, это работает отлично. |
Awrek,
$('[name="sum"]').val(values); вместо Цитата:
|
рони,
Переделал, но к сожалению опять не вышло :( function showCart(){ if(!isEmpty(cart)) { $('.main-cart').html('Корзина пуста!'); } else{ $.getJSON('goods.json', function (data){ var goods = data; var out = ''; for(var id in cart){ values += goods[id].cost * cart[id]; out += ` <button data-id="${id}" class="del-goods">x</button> `; out += `<img src="img\\${goods[id].img}">`; out += `${goods[id].name}`; out += ` <button data-id="${id}" class="minus-goods">-</button> `; out += `${cart[id]}`; out += ` <button data-id="${id}" class="plus-goods">+</button> `; out += cart[id]*goods[id].cost; //цена за один товар out += '</br>'; } $('.main-cart').html(out); $('.sums').html(`Общая самма товаров: ${values} рублей.`); $('.del-goods').on('click', delGoods); $('.plus-goods').on('click', PlusGoods); $('.minus-goods').on('click', MinusGoods); $('[name="sum"]').val(values); // input = document.getElementById('target'); //-----> добавил для передачи значения // input.value = values; -----> добавил для передачи значения }); } } |
Awrek,
а если строку 29 перенести в строку 23? |
Часовой пояс GMT +3, время: 08:48. |