Как вы можете видеть в этом примере, первое поле будет вызывать умножение, а остальные объединят (просто добавят) к последней существующей цифре, которая увеличивает длину, но не выполняет никаких математических операций.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
sfpm<input id="sfpm">
snom<input id="snom">
bonus<input id="bonus">
<hr/>total<input id="staamount">
<script type="text/javascript">
$(document).ready(function(){
$('#sfpm,#snom,#bonus').keyup(function(){
var a =$('#sfpm').val();
var b = $('#snom').val();
var c = $("#bonus").val();
var taamount = a*b+c ;
$('#staamount').val(taamount);
});
});
</script>
Это потому, что вы добавляете две строки вместе вместо чисел.Строки, сложенные вместе, выглядят так:
let str = "Hello ", str2= "world!";
console.log(str + str2);
Так что имеет смысл, что они добавляют .Числа выглядят так:
console.log(1 + 5);
Что делает то, что вы ожидаете, но важно понимать, что оператор + имеет несколько функций.он может либо добавить , либо выполнить математика .Разница в том, какой тип операции выполняется, основана исключительно на type
данных, которые вы используете.
- к строке добавится
- к числу добавится
Так что в вашем коде, когда вы получаете значение с помощью .val()
- происходит следующее:вы получаете строка значения, а не число значения.Чтобы исправить это, мы можем сделать несколько разных вещей.Методы
parseInt
или Number
преобразуют значения из .val()
в целые числа:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
sfpm<input id="sfpm">
snom<input id="snom">
bonus<input id="bonus">
<hr/>total<input id="staamount">
<script type="text/javascript">
$(document).ready(function(){
$('#sfpm,#snom,#bonus').keyup(function(){
var a = parseInt($('#sfpm').val());
var b = Number($('#snom').val());
var c = parseInt($("#bonus").val());
var taamount = a*b+c ;
$('#staamount').val(taamount || 0);
});
});
</script>
Один другой способ привести строку к числу - просто поместить оператор +
перед значением.Это заставит интерпретатор автоматически попытаться изменить значение на число.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
sfpm<input id="sfpm"> snom
<input id="snom"> bonus
<input id="bonus">
<hr/>total<input id="staamount">
<script type="text/javascript">
$(document).ready(function() {
$('#sfpm,#snom,#bonus').keyup(function() {
var a = +$('#sfpm').val();
var b = +$('#snom').val();
var c = +$("#bonus").val();
var taamount = a * b + c;
$('#staamount').val(taamount || 0);
});
});
</script>