我使用以下方法添加文本框。我试过改变多个东西,似乎不能将两个文本框值相乘!必要的我想要2个文本框的值乘以并显示在第三个文本框中。我希望这个值是流动的,也就是当数字改变时改变!我正在使用这个代码,因为我可能会增加一个以上的东西,但如果这是一个太麻烦我将生活在一次只增加两个
我要添加的代码是
<!--adding script #-->
<script>
$(document).ready(function(){
calculateSum();
//iterate through each textboxes and add keyup
//handler to trigger sum event
$(".txt").each(function() {
$(this).keyup(function(){
calculateSum();
});
});
});
function calculateSum() {
var sum = 0;
$("#sum").val(sum.toFixed(2));
//iterate through each textboxes and add the values
$(".txt").each(function() {
//add only if the value is number
if(!isNaN(this.value) && this.value.length!=0) {
sum += parseFloat(this.value);
}
});
//.toFixed() method will roundoff the final sum to 2 decimal places
$("#sum").html(sum.toFixed(2));
var total = document.getElementById("subtotal").value == "";
var total = document.getElementById("subtotal").value = sum;
}
<!--END adding script #-->
我尝试将最后一行设置为
var times1 = document.getElementById(subtotal);
var times2 = document.getElementById(tax);
var equal = times1.value * times2.value;
然后更改var total1 = document.getElementById(“total1”)。value = sum9; to var total1 = document.getElementById(“total1”)。value = equal;
文本框id是小计,并且我尝试更新的框是total1。
非常感谢!
答案 0 :(得分:1)
在每个keyup上,不是获取所有值并明确添加它们,最好扣除相应输入的先前值并将当前更新的值添加到sum ..
另外,如果正确计算了小计,那么你所做的多重操作应该可以正常工作..
请找到以下jsfiddle,其中总和的计算如上所述,并乘以税。
http://jsfiddle.net/tgvrs_santhosh/77uxK/1/
如果您仍然面临这个问题,请告诉我。
答案 1 :(得分:0)
而不是这个
if(!isNaN(this.value) && this.value.length!=0) {
我认为正则表达式可能更好用,因为你使用字符串值
if (/^([-]?((\d+)|(\d+\.\d+)|(\.\d+)))$/.test(this.value)) {
我还没有测试过这个正则表达式,但是你应该能够找到一个好的正则表达式来测试有效数字,如果这个因为某些原因不起作用的话。另外,我注意到==
之后你有一个getElementById
。
我不完全确定这很重要,但你可以sum += (this.value * 1)
而不是parseFloat。
<强>更新强>
试试这个var equal = ($("#subtotal").val() * 1) * ($("#tax").val() * 1);
答案 2 :(得分:0)
我发现您的问题非常混乱,但我认为您想要说的是您想要将所有.txt
字段相加以获得小计,然后相乘通过税率得分总计。如果是这样,那么你已经知道由于你计算它的方式,子总数是一个有效数字,所以那么:
var tax = +$("#tax").val(), // get tax and convert to a number
total = tax ? sum * tax : sum; // if tax is a non-zero number multiply
// otherwise just take the sum as is
如果您的纳税字段不是输入,请使用.text()
代替.val()
。
您现有的代码比它需要的更复杂。你可以这样做:
$(document).ready(function(){
calculateSum();
// you don't need an .each() loop, you can bind a keyup handler
// to all elements in the jQuery object in one step, and you don't
// need the anonymous function since it does nothing but call calculateSum:
$(".txt").keyup(calculateSum);
});
function calculateSum() {
var sum = 0,
val;
//iterate through each textboxes and add the values
$(".txt").each(function() {
// you don't need to test for NaN: just attempt to convert this.value
// to a number with the unary plus operator and if the result is not
// a number the expression val = +this.value will be falsy
if(val = +this.value)
sum += val;
});
$("#sum").html(sum.toFixed(2));
var tax = +$("#tax").val();
$("#total1").html((tax ? sum * tax : sum).toFixed(2));
}
出于某些原因,我的答案中使用的unary plus operator并不广为人知,但我更喜欢parseFloat()
。