2013-05-01 132 views
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()每次都会改变总和计算并写入HTML。换句话说,这些款项只是堆叠在一起。

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

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

+0

ok ....忽略n8wrl ...这就是为什么它的评论。 – Joe 2013-05-01 20:00:55

+1

也许使用['.data()'](http://api.jquery.com/data/)在每个节点上保留并获取原始数字? – ajp15243 2013-05-01 20:01:32

+1

似乎没有人指出,但如果这是一个生产,收款应用程序,那么你手上有一个漏洞。您在此处执行的任何定价或折扣都需要在服务器上进行验证。客户端在网络上做的任何事情都可以由用户随意修改。除非您希望他们能够支付0.00美元(甚至是负数美元),否则您需要重复此代码并在服务器端重新验证结果。 – 2013-05-02 21:38:51

回答

3

你可以使用data-* attributes和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); 
     }); 
    } 

}); 

Browser support是很不错的呢!

+2

有[小提琴](http://jsfiddle.net/JkE7s/1/)来演示这种方法。 – 2013-05-01 20:11:34

+0

圣!刚刚添加了这个。你很快! – SirDerpington 2013-05-01 20:12:29

+0

该方法完美并且非常容易实现。 – Joe 2013-05-01 20:22:38

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); } 
      }); 
     } 
    } 

}); 
0

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

这里有一个基本的例子:

$(document).ready(function(){ 
    var origNumber = parseInt($('#num').text(), 10); 

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

JSFiddle

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