30.06.2018, 21:44
|
Новичок на форуме
|
|
Регистрация: 30.06.2018
Сообщений: 5
|
|
Передача значения переменной - 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);
});
}
}
|
|
30.06.2018, 21:53
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Используя 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, но отсюда уже напрямую не доступна
}
}
}
__________________
29375, 35
Последний раз редактировалось Aetae, 30.06.2018 в 21:58.
|
|
30.06.2018, 22:05
|
Новичок на форуме
|
|
Регистрация: 30.06.2018
Сообщений: 5
|
|
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);
});
|
|
30.06.2018, 22:37
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от Awrek
|
target.value = values;
|
input.value = values
|
|
30.06.2018, 23:00
|
Новичок на форуме
|
|
Регистрация: 30.06.2018
Сообщений: 5
|
|
рони,
Спасибо исправил, но к сожалению значение он все равно не передает.
вывести нужно в 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; //-----> добавил для передачи значения
});
}
}
|
|
30.06.2018, 23:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Awrek,
может вы не учитываите, что values формируется после ответа сервера?
$('.sums').html(`Общая самма товаров: ${values} рублей.`); -- это работает?
|
|
30.06.2018, 23:35
|
Новичок на форуме
|
|
Регистрация: 30.06.2018
Сообщений: 5
|
|
рони,
Да, это работает отлично.
|
|
30.06.2018, 23:55
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Awrek,
$('[name="sum"]').val(values);
вместо
Сообщение от Awrek
|
input = document.getElementById('target'); //-----> добавил для передачи значения45 input.value = values; //-----> добавил для передачи значения
|
|
|
01.07.2018, 00:18
|
Новичок на форуме
|
|
Регистрация: 30.06.2018
Сообщений: 5
|
|
рони,
Переделал, но к сожалению опять не вышло
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; -----> добавил для передачи значения
});
}
}
|
|
01.07.2018, 07:23
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Awrek,
а если строку 29 перенести в строку 23?
|
|
|
|