乘以价值

时间:2012-07-18 02:39:27

标签: javascript jquery html

我使用以下方法添加文本框。我试过改变多个东西,似乎不能将两个文本框值相乘!必要的我想要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。

非常感谢!

3 个答案:

答案 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()