2011-12-21 63 views
1

我有一個表是這樣的:jQuery的計算在一個功能

sellingprice cost postage profit paypal ebayfees discount FVF 
    ?   49  1.75  4.00  ?   ?   0.2  ?  
    ?   51  1.75  4.00  ?   ?   0.2  ?  

這是不同的公式解決上述信息:

sellingpriceresult =成本+郵資+利潤+貝寶+ FVF;
paypalresult = sellingpriceresult * 0.022 + 0.3;
FVFresult = ebayfees - (ebayfees * discount);
ebayfeesresult將使用if條件,以顯示它的結果是,這樣的事情:

如果sellingpriceresult> 50然後(sellingpriceresult - 50)*如果0.05 + 3.5

別的sellingpriceresult < = 50然後sellingpriceresult * 0.07

我想用客戶端計算來實現計算。我的問題是,我不知道如何將所有計算結合在一個函數中。我對jQuery有一些想法,並希望你們指導我如何執行這個。任何幫助將得到更多的讚賞。

這裏是我的示例代碼:

<table border = "0">  
      <tr> 
       <td><center>Selling Price</center></td> 
       <td><center>Cost</center></td> 
       <td><center>Postage</center></td> 
       <td><center>Profit</center></td> 
       <td><center>Paypal</center></td> 
       <td><center>eBay Fees</center></td> 
       <td><center>Discount</center></td> 
       <td><center>FVF</center></td> 
      </tr> 
       <tr> 
        <td> 
         <input type='text' id='sellingprice' name='sellingprice' size='10' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='cost' name='cost' size='10' value='$myrow[1]' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='postage' name='postage' size='10' value='1.75' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='profit' name='profit' size='10' value='4.00' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='paypal' name='paypal' size='10' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='ebayfees' name='ebayfees' size='10' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='discount' name='discount' size='10' value='0.2' readonly='true'/> 
        </td> 
        <td> 
         <input type='text' id='fvf' name='fvf' size='10' readonly='true'/> 
        </td> 
       </tr> 
     </table> 

    <script> 

     $(document).ready(function(){ 
      $('tr').each(function(){ 
      var sellingprice = 0; 
      $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){ 
       sellingprice += (+$(this).val()); 
      }); 
      $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow"); 
      });  
     }); 

     $(document).ready(function(){ 
      $('tr').each(function(){ 
      var paypal = 0; 
      $(this).find("input[name=sellingprice]").each(function(){ 
       paypal = (+$(this).val()) * 0.022 + 0.3; 
       paypal = paypal.toFixed(2); 
      }); 
      $(this).find("input[name=paypal]").val(paypal).css("background-color", "yellow"); 
      }); 
     }); 


     $(document).ready(function(){ 
      $('tr').each(function(){ 
      var sellingprice = 0; 
      $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){ 
       sellingprice = (+$(this).val()); 
       sellingprice = sellingprice.toFixed(2); 
      }); 
      $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow"); 
      });  
     }); 

     $(document).ready(function(){ 
      $('tr').each(function(){ 
      var fvf = 0; 
      $(this).find("input[name=ebayfees],input[name=discount]").each(function(){ 
       fvf = (+$(this).val()); 
      }); 
      $(this).find("input[name=fvf]").val(fvf).css("background-color", "yellow"); 
      }); 
     }); 


     $(document).ready(function(){ 
      $('tr').each(function(){ 
      var sellingprice = 0; 
      $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){ 
       sellingprice += (+$(this).val()); 
      }); 
      $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow"); 
      }); 
     }); 

     $(document).ready(function(){ 
      $('tr').each(function() { 
       var sellingpriceResult = parseFloat($(this).find("input[name=sellingprice]").val()); 

       var result = 0; 
       if (sellingpriceResult > 50) { 
        result = (sellingpriceResult - 50) * 0.05 + 3.5; 
        result = result.toFixed(2); 
       } 
       else { 
        result = sellingpriceResult * 0.07; 
        result = result.toFixed(2); 
       } 
       $(this).find("input[name=ebayfees]").val(result).css("background-color", "yellow"); 
      }); 
     }); 
    </script> 
+0

成本的價值是'$ myrow [1]'...我猜想這是一個錯誤。 – 2011-12-21 08:44:57

+0

因爲成本是在數據庫中獲取填寫費用列 – jovazel 2011-12-21 11:57:26

回答

0

注1:我猜有將是幾行,所以你必須刪除ID從您的輸入屬性,因爲ID必須在唯一一個HTML文檔。

注2:我不確定要完全理解你想要做的計算。 「賣價」取決於「FVF」,「FVF」取決於「Ebay費用」和「Ebay費用」取決於「銷售價格」...似乎有點不可能用我來計算這種遞歸依賴性

注3:您在示例中使用的是insertionfee元素,但我不在您提供的標記中。

以下代碼的一些注意事項:

  • 得到一個jQuery對象當前<tr>的再利用與$this = $(this)

  • 找到重新使用所有必要元素。除了更高效的感謝$this

  • 這樣$item.val(myvariable = 1+1)實際上節省了計算爲myvariable,並把它傳遞給.val()

  • condition ? <if condition true> : <if condition false>使您可以在線conditionnal聲明

  • 我沒能使用.toFixed(2),我想這是你的功能

我做了一個jsfiddle供您看。

$(document).ready(function() { 

    $('tr').each(function() { 

     var $this = $(this), 
      $sellingprice = $this.find('[name=sellingprice]'), 
      $cost = $this.find('[name=cost]'), 
      $postage = $this.find('[name=postage]'), 
      $profit = $this.find('[name=profit]'), 
      $paypal = $this.find('[name=paypal]'), 
      $ebayfees = $this.find('[name=ebayfees]'), 
      $discount = $this.find('[name=discount]'), 
      $fvf = $this.find('[name=fvf]'); 

     var selpriceresult, paypalresult, fvfresult, ebayresult; 

     $sellingprice.val((selpriceresult = $cost.val() + $postage.val() + $paypal.val() + $fvf.val())); 
     $paypal.val(paypalresult = selpriceresult * 0.022 + 0.3); 

     $ebayfees.val(ebayresult = selpriceresult > 50 
         ? (selpriceresult - 50) * 0.05 + 3.5 
         : selpriceresult * 0.07); 

     $fvf.val(fvfresult = ebayresult - (ebayresult - $discount.val())); 

}); 



關於

我已經檢查了Excel文件中的公式。這並不像看起來那麼容易。公式具有依賴性,我不知道excel是如何真正在內部執行計算的。

我知道excel構建和優化依賴關係樹來確定它應該如何執行工作簿的計算。你可以對可視化的依賴關係和單元格之間的關係進行排序(工具>審計),但我不是一個優秀的專家,它完全不在我的知識範圍內。

我認爲這也是有點超出了這個問題的範圍 - 這是將jquery代碼塊合併爲一個,而不是轉換 excel公式到javascript計算。

我真的很樂意幫你解決計算問題,但我不能。你也許可以問另一個關於這個特定主題的問題。

+0

注3:對於我的標記中的插入費對不起,我已經刪除它。這不包括在標記中。 – jovazel 2011-12-21 11:59:48

+0

是的,這是真的。銷售價格取決於paypal和fvf的輸出。 ebayfees和paypal兩者都取決於銷售價格的產出。你能指導我直到我得到這個問題的正確計算。 – jovazel 2011-12-21 12:03:39

+0

我不知道我怎麼能指導你確定公式,你是誰知道他們是什麼。我只能指導你如何在代碼中編寫它們。 – 2011-12-21 12:12:49