Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Передача значения переменной - JavaScript (https://javascript.ru/forum/jquery/74315-peredacha-znacheniya-peremennojj-javascript.html)

Awrek 30.06.2018 21:44

Передача значения переменной - 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);
        
       
    });
   }
}

Aetae 30.06.2018 21:53

Используя 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, но отсюда уже напрямую не доступна
    }
  }
}

Awrek 30.06.2018 22:05

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

Цитата:

Сообщение от Awrek
target.value = values;

input.value = values

Awrek 30.06.2018 23:00

рони,
Спасибо исправил, но к сожалению значение он все равно не передает.
вывести нужно в 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

Awrek,
может вы не учитываите, что values формируется после ответа сервера?
$('.sums').html(`Общая самма товаров: ${values} рублей.`); -- это работает?

Awrek 30.06.2018 23:35

рони,
Да, это работает отлично.

рони 30.06.2018 23:55

Awrek,
$('[name="sum"]').val(values);

вместо
Цитата:

Сообщение от Awrek
input = document.getElementById('target'); //-----> добавил для передачи значения45 input.value = values; //-----> добавил для передачи значения


Awrek 01.07.2018 00:18

рони,
Переделал, но к сожалению опять не вышло :(
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

Awrek,
а если строку 29 перенести в строку 23?


Часовой пояс GMT +3, время: 08:48.