2014-10-02 5 views
2

У меня есть этот HTML и Java Script. Я устанавливаю для того, чтобы автоматически отображать общее количество этих трех полей ввода. Но это дает мне неправильный ответ, если я использую + (добавление). Я хорошо работаю, если использую * (умножить) или/(делить.) Любой, пожалуйста, помогите!Добавление числового значения в HTML

Вот мой код HTML.

</pre> 
    <tr> 
     <td><input type='number' id='amt1' name='amt1' onkeyup='total_amount();' onKeyUp='return numbersonly(event);' class='form-control'></td> 
     <td><input type='number' id='amt2' name='amt2' onkeyup='total_amount();' onKeyUp='return numbersonly(event);' class='form-control'></td> 
     <td><input type='number' id='amt3' name='amt3' onkeyup='total_amount();' onKeyUp='return numbersonly(event);' class='form-control'></td> 
     <td><input type='number' id='total' name='total' class='form-control' readonly='readonly'></td> 
    </tr> 
<pre> 

Heres мой Java Script ...

<script type="text/javascript"> 

    function total_amount() 
    { 
     document.getElementById('total').value = document.getElementById('amt1').value + document.getElementById('amt2').value + document.getElementById('amt3').value 
    } 

    function numbersonly(e){ 
     var unicode=e.charCode? e.charCode : e.keyCode 
     if (unicode!=8 && unicode!=46 && unicode!=37 && unicode!=27 && unicode!=38 && unicode!=39 && unicode!=40 && unicode!=9){ //if the key isn't the backspace key (which we should allow) 
      if (unicode<48||unicode>57) 
       return false 
     } 
    } 

</script> 
</pre> 
+0

где ваш HTML? –

+0

Почему '' 1 "+" 1 "==" 11 "'? О, вы добавляете строки ... – RobG

+1

Ограничение ввода пользователем определенных клавиш не является удобным для пользователя и не останавливает ввод цифр без вставки или других средств, просто не делайте этого. Вам все равно, что это значение после того, как пользователь закончил вводить его, как они добрались до них. – RobG

ответ

1

использование

document.getElementById('amt1').value|0 + 
document.getElementById('amt2').value|0 + 
document.getElementById('amt3').value|0 ; 

ИЛИ

parseInt(document.getElementById('amt1').value) + 
parseInt(document.getElementById('amt2').value) + 
parseInt(document.getElementById('amt3').value) ; 

так, что они рассматриваются как число

+1

Код только ответы не понравились, объясните проблему OPs и почему ваш ответ ее исправляет. '| 0' не является хорошей стратегией, если OP использует поплавки. – RobG

+0

Следует использовать parseInt. но он не допускает, чтобы текстовое поле было пустым. вы должны ввести 0. –

+0

, а затем поставить проверку пустого текстового поля. Если текстовое поле пуст, используйте 0 или не разобрать строку. – Prince

1

изменить вашу функцию

function total_amount() { 
    var amt1 = parseInt(document.getElementById('amt1').value); 
    if (isNaN(amt1)) { 
     amt1 = 0; 
    } 

    var amt2 = parseInt(document.getElementById('amt2').value); 
    if (isNaN(amt2)) { 
     amt2 = 0; 
    } 

    var amt3 = parseInt(document.getElementById('amt3').value); 
    if (isNaN(amt3)) { 
     amt3 = 0; 
    } 

    document.getElementById('total').value = amt1 + amt2 + amt3; 
} 
+0

Спасибо! что очень помогает. –

+0

, чем не забудьте указать правильный знак. так что это поможет другим. –

+0

Все еще конкатенации. –

1

использование parseInt().

function total_amount() 
{ 
    document.getElementById('total').value =parseInt(document.getElementById('amt1').value) + 
parseInt(document.getElementById('amt2').value) + parseInt(document.getElementById('amt3').value) 
} 
1

Простое решение для преобразования строки (возвращенное .value) к ряду является использование унарную + оператора:

function total_amount() { 
    document.getElementById('total').value = 
     +document.getElementById('amt1').value + 
     +document.getElementById('amt2').value + 
     +document.getElementById('amt3').value 
} 
2

держать его просто. Используйте event delegation и один обработчик keyUp. Не используйте встроенные обработчики. Преобразуйте значение поля в Number, прежде чем делать с ним расчеты. Вот пример:

document.querySelector('table').addEventListener('keyup', sum); 
 

 
function sum(e) { 
 
    var from = e.target || e.srcElement 
 
    ,isNumericInput = /number/i.test(from.type); 
 
    if (!isNumericInput) {return true;} 
 
    var d = document 
 
    ,inputs = d.querySelector('table').querySelectorAll('[type=number]') 
 
    ,sumfld = d.querySelector('#sum') 
 
    ,sumnow = 0; 
 
    
 
    [].forEach.call(inputs, 
 
        function (v) { 
 
         sumnow += +(v.value); //<= conversion to Number, using + 
 
        }); 
 
    
 
    sumfld.textContent = sumnow; 
 
}
<table> 
 
    <tr> 
 
    <td><input type='number' id='amt1' name='amt1' class='form-control'></td> 
 
    <td><input type='number' id='amt2' name='amt2' class='form-control'></td> 
 
    <td><input type='number' id='amt3' name='amt3' class='form-control'></td> 
 
    <td><b>Total</b>: <span id="sum"></span></td> 
 
    </tr> 
 
</table>

+0

где я должен их поставить? 'document.querySelector ('table'). AddEventListener ('keyup', sum);' они должны быть включены в мою функцию скрипта? –

+0

@JohnArzaga в верхней части вашего скрипта или в обработчике 'onload' – KooiInc

+0

@RobG, конечно. Это не showstopper, я бы сказал, но удалил '|| 0' часть. – KooiInc