0

我对这个概念有点麻烦。我正在尝试编写一个相对简单的脚本,它将一组整数增加/减少指定的数量。

此代码在逻辑上起作用,但并非如所愿。

HTML:

            <table class="ebc-table">
                <tr>
                  <td class="priceChange">4.00</td>
                  <td class="priceChange">16.00</td>
                  <td class="priceChange">31.00</td>
                  <td class="priceChange">51.00</td>
                </tr></table>

jQuery:

        $(".applybutton").click(function(){
            var adjFactor = $("#adj_factor :selected").val();
            var adjAmount = $("#adj_amount").val();

            if( adjFactor == "$" )
            {
                $(".priceChange").each(function() {
                    var test = $(this).html();
                    var updateAmt = parseFloat(test) + parseFloat(adjAmount);
                    //if( isNaN( parseFloat( updateAmt) ) ) // do something here eventually
                    return $(this).html(updateAmt);
                });
            }

        });

每当输入调整量并且用户单击应用按钮时,所有值都会相应更改。正如您在上面的代码中看到的那样,每次计算总和时,它都使用 TD 中存在的整数,而不是预期的原始起始数字......因为当然,每次 $(this).html() sum 被计算并写入 html。换句话说,总和只是堆叠在一起。

我怎么能写这个来保留原始数字,从原始数字中添加/减去,而不是从累积的数字中添加/减去?

我意识到我的解释可能令人困惑。如果需要,我会发布一个 jsfiddle。

4

3 回答 3

3

您可以使用data-* 属性和 jQuery .data()来获取它。看到这个。

HTML:

<table class="ebc-table">
            <tr>
              <td class="priceChange" data-origprice="4.00">4.00</td>
              ...
            </tr>
</table>

JS/jQuery:

$(".applybutton").click(function () {
    var adjFactor = $("#adj_factor :selected").val();
    var adjAmount = $("#adj_amount").val();

    if (adjFactor == "$") {
        $(".priceChange").each(function () {
            var test = $(this).data('origprice'); //gets data-origPrice attribute
            var updateAmt = parseFloat(test) + parseFloat(adjAmount);
            //if( isNaN( parseFloat( updateAmt) ) ) // do something here eventually
            return $(this).html(updateAmt);
        });
    }

});

浏览器支持也很好!

于 2013-05-01T20:08:15.993 回答
0

一种策略是将原始值保存在数组中。

    var originals = []
    $(".applybutton").click(function(){
    var adjFactor = $("#adj_factor :selected").val();
    var adjAmount = $("#adj_amount").val();

    if( adjFactor == "$" )
    {
        if (originals.length === 0) {
            $(".priceChange").each(function(i) {
                originals[i] = parseFloat($(this).html());
            }
        }
        $(".priceChange").each(function(i) {
        return function() {
            var test = $(this).html();
                var updateAmt = originals[i] + parseFloat(adjAmount);
                //if( isNaN( parseFloat( updateAmt) ) ) // do something here eventually
                else{return $(this).html(updateAmt); }
            });
        }
    }

});
于 2013-05-01T20:08:20.987 回答
0

您可以在页面加载时将原始数字存储在变量中,并在递增时使用该值。

这是一个基本示例:

$(document).ready(function(){
    var origNumber = parseInt($('#num').text(), 10);
    
    $('button').click(function() {
        var incr = parseInt($('#incr :selected').val(), 10);
        alert(origNumber + incr);
    });
});

JSFiddle

如果需要存储多个值,请使用数组。

于 2013-05-01T20:09:42.987 回答