2013-04-11 106 views
3

這是更長的形式的一小部分(粉紅色,綠色和黃色盒/箭頭已經被添加爲清楚起見):問題與形式計算

原件: enter image description here

標記的: enter image description here

基本上 - 隨着數字輸入到宿舍 - >檢查(粉紅色框),該值自動求和和經銷商的填充只讀域「總現金」 (這已經在工作)。然後,一旦「退款支付」字段中輸入了一個值(包括零),它就會自動與「總現金」進行彙總並填充「最終總額」字段 - 這對每列都是分開的。這是有效的 - 但我希望我不必強迫用戶輸入Refunds Paid中的值,除非有價值。最後 - 我還需要從「存款」和「經理站」列中的「最終彙總」到自動彙總到「總計存款」,似乎根本沒有工作...

最後 - 我試過要實現一個按鈕來重新計算所有總計,然後點擊「提交」將其轉換爲PDF - 我也被困在那裏。名稱和ID calc - 我願意接受任何最佳實踐解決方案。我會非常樂意做出重大修改 - 作爲一個新手,很多這個採用「我的褲子」編碼。

我很新的JavaScript和JQuery - 所以請溫柔?下面的代碼(有關這一問題的部分,反正):

HTML

<tr> 
    <td class="label" colspan="4">Deposit/Safe/Manager Station Count</td> 
</tr> 
<tr> 
    <td class="null"></td> 
    <td class="label">Deposit</td> 
    <td class="label">Manager Station</td> 
    <td class="label">Safe</td> 
</tr> 
<tr> 
    <td class="label">Quarters</td> 
    <td class="field"><input type="text" name="depQuarters" class="dep" tabindex="31" /></td> 
    <td class="field"><input type="text" name="manQuarters" class="man" tabindex="41" /></td> 
    <td class="field"><input type="text" name="safeQuarters" class="safe" tabindex="51" /></td> 
</tr> 
<tr> 
    <td class="label">Coins</td> 
    <td class="field"><input type="text" name="depCoins" class="dep" tabindex="32" /></td> 
    <td class="field"><input type="text" name="manCoins" class="man" tabindex="42" /></td> 
    <td class="field"><input type="text" name="safeCoins" class="safe" tabindex="52" /></td> 
</tr> 
<tr> 
    <td class="label">$1 Bills</td> 
    <td class="field"><input type="text" name="dep1Bills" class="dep" tabindex="33" /></td> 
    <td class="field"><input type="text" name="man1Bills" class="man" tabindex="43" /></td> 
    <td class="field"><input type="text" name="safe1Bills" class="safe" tabindex="53" /></td> 
</tr> 
<tr> 
    <td class="label">$5 Bills</td> 
    <td class="field"><input type="text" name="dep5Bills" class="dep" tabindex="34" /></td> 
    <td class="field"><input type="text" name="man5Bills" class="man" tabindex="44" /></td> 
    <td class="field"><input type="text" name="safe5Bills" class="safe" tabindex="54" /></td> 
</tr> 
<tr> 
    <td class="label">$10 Bills</td> 
    <td class="field"><input type="text" name="dep10Bills" class="dep" tabindex="35" /></td> 
    <td class="field"><input type="text" name="man10Bills" class="man" tabindex="45" /></td> 
    <td class="field"><input type="text" name="safe10Bills" class="safe" tabindex="55" /></td> 
</tr> 
<tr> 
    <td class="label">$20 Bills</td> 
    <td class="field"><input type="text" name="dep20Bills" class="dep" tabindex="36" /></td> 
    <td class="field"><input type="text" name="man20Bills" class="man" tabindex="46" /></td> 
    <td class="field"><input type="text" name="safe20Bills" class="safe" tabindex="56" /></td> 
</tr> 
<tr> 
    <td class="label">$50 Bills</td> 
    <td class="field"><input type="text" name="dep50Bills" class="dep" tabindex="37" /></td> 
    <td class="field"><input type="text" name="man50Bills" class="man" tabindex="47" /></td> 
    <td class="field"><input type="text" name="safe50Bills" class="safe" tabindex="57" /></td> 
</tr> 
<tr> 
    <td class="label">$100 Bills</td> 
    <td class="field"><input type="text" name="dep100Bills" class="dep" tabindex="38" /></td> 
    <td class="field"><input type="text" name="man100Bills" class="man" tabindex="48" /></td> 
    <td class="field"><input type="text" name="safe100Bills" class="safe" tabindex="58" /></td> 
</tr> 
<tr> 
    <td class="label">Checks</td> 
    <td class="field"><input type="text" name="depChecks" class="dep" tabindex="39" /></td> 
    <td class="field"><input type="text" name="manChecks" class="man" tabindex="49" /></td> 
    <td class="field"><input type="text" name="safeChecks" class="safe" tabindex="59" /></td> 
</tr> 
<tr> 
    <td class="label">Total Cash</td> 
    <td class="field"><input type="text" name="depTotal" id="depTotal" class="depFinalFactor" readonly /></td> 
    <td class="field"><input type="text" id="manTotal" name="manTotal" class="manFinalFactor" readonly /></td> 
    <td class="field"><input type="text" id="safeTotal" name="safeTotal" class="safeFinalFactor" readonly /></td> 
</tr> 
<tr> 
    <td class="label">Refunds Paid In</td> 
    <td class="field"><input type="text" name="depRefunds" id="depRef" class="depFinalFactor" tabindex="40" /></td> 
    <td class="field"><input type="text" name="manRefunds" tabindex="50" class="manFinalFactor" /></td> 
    <td class="field"><input type="text" name="safeRefunds" tabindex="60" class="safeFinalFactor" /></td> 
</tr> 
<tr> 
    <td class="label">Final Total</td> 
    <td class="field"><input type="text" name="depFinalTotal" id="depFinalTotal" readonly /></td> 
    <td class="field"><input type="text" name="manFinalTotal" id="manFinalTotal" readonly /></td> 
    <td class="field"><input type="text" name="safeFinalTotal" id="safeFinalTotal" readonly /></td> 
</tr> 
<tr> 
    <td class="null" colspan="2"></td> 
    <td class="label">Total to Deposit</td> 
    <td class="field" id="totalToDeposit"></td> 
</tr> 
</table> 
<input type="button" name="calc" id="calc" value="Recalculate Totals" /> 
<input style="float: right;" type="submit" name="btn_submit" /> 
</form> 
</body> 
</html> 

使用Javascript/JQuery的

$(document).ready(function(){ 

    //iterate through each textboxes and add keyup 
    //handler to trigger sum event 

    $(".accXPT1").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".accXPT1", "#accXPT1Total"); 
     }); 
    }); 
    $(".accXPT2").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".accXPT2", "#accXPT2Total"); 
     }); 
    }); 
    $(".accXPT3").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".accXPT3", "#accXPT3Total"); 
     }); 
    }); 


    $(".dispXPT1").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".dispXPT1", "#dispXPT1Total"); 
     }); 
    }); 
    $(".dispXPT2").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".dispXPT2", "#dispXPT2Total"); 
     }); 
    }); 
    $(".dispXPT3").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".dispXPT3", "#dispXPT3Total"); 
     }); 
    }); 


    $(".dep").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".dep", "#depTotal"); 
     });   
    }); 
    $(".man").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".man", "#manTotal"); 
     }); 
    }); 
    $(".safe").each(function() { 
     $(this).keyup(function(){ 
      calculateSumForInput(".safe", "#safeTotal"); 
     }); 
    }); 


    $(".depFinalFactor").keyup(function() { 
     var sum = 0; 

     $(".depFinalFactor").each(function() { 
     //add only if the value is number 
      if(!isNaN(this.value) && this.value.length!=0) { 
       sum += parseFloat(this.value); 
      } 
     });  


     mySum = sum.toFixed(2); 

     if (mySum == $("#moneyAccountedFor").val()) { 
      $("#totalToDeposit").css("color", "green"); 
     } else { 
      $("#totalToDeposit").css("color", "red"); 
     } 

     $("#depFinalTotal").val(mySum); 
     $("#totalToDeposit").text(mySum); 
    }); 

    $("#calc").on("click", function() { 
     var sum = 0; 

     $(".depFinalFactor").each(function() { 
     //add only if the value is number 
      if(!isNaN(this.value) && this.value.length!=0) { 
       sum += parseFloat(this.value); 
      } 
     });  


     mySum = sum.toFixed(2); 

     if (mySum == $("#moneyAccountedFor").val()) { 
      $("#totalToDeposit").css("color", "green"); 
     } else { 
      $("#totalToDeposit").css("color", "red"); 
     } 

     $("#depFinalTotal").val(mySum); 
     $("#totalToDeposit").text(mySum); 
    }); 

    $(".manFinalFactor").keyup(function() { 
     var sum = 0; 

     $(".manFinalFactor").each(function() { 
     //add only if the value is number 
      if(!isNaN(this.value) && this.value.length!=0) { 
       sum += parseFloat(this.value); 
      } 
     });  


     mySum = sum.toFixed(2); 
     $("#manFinalTotal").val(mySum); 
    }); 

    $(".safeFinalFactor").keyup(function() { 
     var sum = 0; 

     $(".safeFinalFactor").each(function() { 
     //add only if the value is number 
      if(!isNaN(this.value) && this.value.length!=0) { 
       sum += parseFloat(this.value); 
      } 
     });  


     mySum = sum.toFixed(2); 
     $("#safeFinalTotal").val(mySum); 
    }); 

}); 

function calculateSum(myClass, myID) { 

    var sum = 0; 
    //iterate through each textboxes and add the values 
    $(myClass).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 
    myTotal = sum.toFixed(2); 
    $(myID).text(myTotal); 
} 

function calculateSumForInput(myClass, myID) { 

    var sum = 0; 
    //iterate through each textboxes and add the values 
    $(myClass).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 
    myTotal = sum.toFixed(2); 
    $(myID).val(myTotal); 
} 
+1

這裏是一個小提琴,如果有人想玩:http://jsfiddle.net/Mt9NX/ – stormdrain 2013-04-11 15:56:34

回答

1

這一工程 - 但我想我沒有」除非有值,否則不得不強制用戶輸入支付退款中的值 。

這是你想要的嗎? 嘗試一下下面的代碼

1 /添加此功能

   function showAllTotal(){ 
        var sum = 0; 

        $(".depFinalFactor").each(function() { 
        //add only if the value is number 
         if(!isNaN(this.value) && this.value.length!=0) { 
          sum += parseFloat(this.value); 
         } 
        });  


        mySum = sum.toFixed(2); 

        if (mySum == $("#moneyAccountedFor").val()) { 
         $("#totalToDeposit").css("color", "green"); 
        } else { 
         $("#totalToDeposit").css("color", "red"); 
        } 

        $("#depFinalTotal").val(mySum); 
        $("#totalToDeposit").text(mySum); 
       } 

2 /修改的地方:上面的功能添加到每個事件

  $(".dep").each(function() { 
        $(this).keyup(function(){ 
         calculateSumForInput(".dep", "#depTotal"); 
         showAllTotal(); 
        });   
       }); 
       $(".man").each(function() { 
        $(this).keyup(function(){ 
         calculateSumForInput(".man", "#manTotal"); 
         showAllTotal(); 
        }); 
       }); 
       $(".safe").each(function() { 
        $(this).keyup(function(){ 
         calculateSumForInput(".safe", "#safeTotal"); 
         showAllTotal(); 
        }); 
       }); 

3 /替換的功能 「$(」 .depFinalFactor「)。keyup(function()」with below

  $(".depFinalFactor").keyup(function() { 
        showAllTotal(); 
      }); 

我所做的是將t他的功能是將總價值彙總到一個函數中,並且每次用戶開始在表中的一個字段中輸入數字時,我都會重用它。所有在你的代碼中,沒有更多!

編輯:我更新你的代碼小提琴也。

+0

固定!你是一個拯救生命的人! – drewwyatt 2013-04-11 19:08:13