Не работает сложение

Тема в разделе "JavaScript", создана пользователем ram222, 23 июл 2015.

Модераторы: ZiX
  1. ram222

    ram222 Da Vinci

    Регистр.:
    27 апр 2009
    Сообщения:
    747
    Симпатии:
    73
    есть код
    Код:
            $("#raschet2").click(function(){
        a2=$("#a2").val();
        b2=$("#b2").val();
        r2=(a2/100)*b2;
        t2=r2+a2;
        $("#total12").val(r2);
        $("#total22").val(t2);
        });
    Почему то не работает сложение t2=r2+a2; , выводит две переменные рядом, то есть например
    r2=1, a2=2 то выведет 12 а не 3.
    если сделать t2=r2+1; то норм, выводит 3.
    причём r2=(a2/100)*b2; работает, то есть переменная a2 есть.
     
  2. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    162
    Симпатии:
    46
    Потому что ты получаешь значение в строковом виде. Тебе нужно преобразовать в тип Number. Это делается операцией a2 = +a2; b2= +b2; А там где у тебя операция умножения интерпретатор сам меняет тип.
     
    ram222 нравится это.
  3. ram222

    ram222 Da Vinci

    Регистр.:
    27 апр 2009
    Сообщения:
    747
    Симпатии:
    73
    Можно как то сразу преобразовывать? Чтобы не добавлять код.
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    385
    Симпатии:
    254
    t2=parseInt(r2)+parseInt(a2)
     
    ram222 нравится это.
  5. ram222

    ram222 Da Vinci

    Регистр.:
    27 апр 2009
    Сообщения:
    747
    Симпатии:
    73
    Это надо с каждым полем input так делать?
    Переделывал несколько калькуляторов, но как то не сталкивался с такой проблемой, хотя там много переменных было и input(ов).
     
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    385
    Симпатии:
    254
    Если две переменных типа string, то происходит склеивание, если int, то сложение.
     
  7. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    162
    Симпатии:
    46
    В форме предавай тип в виде number.
    Код:
    <input type="number" name="" value="" placeholder="">
     
    ram222 нравится это.
  8. ram222

    ram222 Da Vinci

    Регистр.:
    27 апр 2009
    Сообщения:
    747
    Симпатии:
    73
    Вот это то что нужно, и никаких добавлений в скрипт.
    Со всеми браузерами будет работать?
     
  9. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    162
    Симпатии:
    46
    Работает со всеми браузерами, поддерживается почти везде.
    Перейти по ссылке
     
  10. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    379
    Симпатии:
    192
    Если получаете значение через .val(), то это вам не поможет. Эксперимента ради:
    Код:
    <span>Click</span><br><br>
    <input id="inp1" type="number" name="" value="888" placeholder="">
    <script>
    $('span').click(function(){
      var a = $('#inp1').val();
      alert(typeof(a) + ' ' +a);  // вернет string
        });
    </script>
    
    Если требуется получать значение типа number прямо из элемента - можно например так:
    Код:
      <span>Click</span>
    <input id="inp1" name="" data-number="8989" onkeyup="$(this).data('number', +this.value);" value="8989" placeholder="">
      <script>
        $('span').click(function(){
      var a = $('#inp1').data('number');
      alert(typeof(a) + ' ' +a); // вернет number
    });
      </script>
    
    Хотя лучше всё же приводить тип в скрипте и не пользоваться таким вариантом.
     
    Последнее редактирование: 28 июл 2015