Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.06.2018, 21:44
Новичок на форуме
Отправить личное сообщение для Awrek Посмотреть профиль Найти все сообщения от Awrek
 
Регистрация: 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);
        
       
    });
   }
}
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2018, 21:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Используя 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.
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2018, 22:05
Новичок на форуме
Отправить личное сообщение для Awrek Посмотреть профиль Найти все сообщения от Awrek
 
Регистрация: 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);
});
Ответить с цитированием
  #4 (permalink)  
Старый 30.06.2018, 22:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от Awrek
target.value = values;
input.value = values
Ответить с цитированием
  #5 (permalink)  
Старый 30.06.2018, 23:00
Новичок на форуме
Отправить личное сообщение для Awrek Посмотреть профиль Найти все сообщения от Awrek
 
Регистрация: 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;  //-----> добавил для передачи значения
    });
   }
}
Ответить с цитированием
  #6 (permalink)  
Старый 30.06.2018, 23:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Awrek,
может вы не учитываите, что values формируется после ответа сервера?
$('.sums').html(`Общая самма товаров: ${values} рублей.`); -- это работает?
Ответить с цитированием
  #7 (permalink)  
Старый 30.06.2018, 23:35
Новичок на форуме
Отправить личное сообщение для Awrek Посмотреть профиль Найти все сообщения от Awrek
 
Регистрация: 30.06.2018
Сообщений: 5

рони,
Да, это работает отлично.
Ответить с цитированием
  #8 (permalink)  
Старый 30.06.2018, 23:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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

вместо
Сообщение от Awrek
input = document.getElementById('target'); //-----> добавил для передачи значения45 input.value = values; //-----> добавил для передачи значения
Ответить с цитированием
  #9 (permalink)  
Старый 01.07.2018, 00:18
Новичок на форуме
Отправить личное сообщение для Awrek Посмотреть профиль Найти все сообщения от Awrek
 
Регистрация: 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;  -----> добавил для передачи значения
    });
   }
}
Ответить с цитированием
  #10 (permalink)  
Старый 01.07.2018, 07:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование значения переменной в строку leny Общие вопросы Javascript 3 01.10.2011 22:34
Передача параметров javascript между iframe и документом. freedon Events/DOM/Window 8 05.05.2011 16:29
передача из php в javascript многострочной переменной smollvrn Общие вопросы Javascript 12 14.11.2010 20:38
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34