2013-05-01 193 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

如果您需要存儲多個值,使用數組。