0

我使用以下方法来添加文本框。我尝试过更改多项内容,但似乎无法将两个文本框值相乘!基本我想要 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; 到 var total1 = document.getElementById("total1").value = equal;

文本框 id 是小计,我试图更新的框是 total1。

非常感谢!

4

3 回答 3

1

在每个 keyup 上,与其获取所有值并显式添加它们,不如减去相应输入的先前值并将当前更新的值添加到 sum..

此外,如果正确计算了小计,那么您所做的乘法运算应该可以正常工作。

请找到下面的 jsfiddle,其中的总和是按照上面解释的方式计算的,以及乘以税..

http://jsfiddle.net/tgvrs_santhosh/77uxK/1/

让我知道你是否仍然面临这个问题..

于 2012-07-18T03:35:09.347 回答
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);

于 2012-07-18T02:57:16.697 回答
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));
}

出于某种原因,在我的答案中使用的一元加号运算符并不广为人知,但我更喜欢parseFloat().

于 2012-07-18T03:45:23.070 回答