2009-07-31 16 views
2

答えを見つけました。あなたが興味を持っているかどうか見てください。ヘルプが必要です - - テーブルの行と列の合計

このプロジェクトを完了するための私のアプローチを変更しました。

必要性は、右側には「合計」行を計算することができるようにすると、列は「日の総計」

は、私はそれの一部が動作し得ることができましたし、それは計算と変にです正しいことができません。

総計は機能しているようですが、合計は自分の数値を構成しているようです。

大きな問題は、クラスを配置した方法ですと思いますか?それらと一緒かもしれない?

これは私が持っているものです。

JS:

<script type="text/javascript" language="javascript"> 
    $(document).ready(function(){ 
     $('.date').mask("99/99/9999"); 
     $('.account').mask("99-9-999999-9999"); 
     /*calcuating the vertical and horizontal inputs*/ 
    $('.calc').change(function(){ 
     var classArray = $(this).attr('class').split(' '); 

     //Personal gas expense 
     $('.gasamount').sum("change", "#totals4"); 
     var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, ""); 
     $('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val()); 
     $('.gasmoney').sum("change", "#totals5"); 

     ////////////////////// 

     //Sum of each cell 
     $.each(classArray, function(){ 
      $('.'+this).sum("change", ".ttl"+this); 

     }); 

     //Finding the grandtotal 
     var grandTotal = $('.row26').parent().children('td:last').children('input'); 
     var sum = $('.row25').parent().children('td').children('.calc').sum(); 
     grandTotal.val(Number(sum).toFixed(2)); 

    }); 
     /*bottom loop js*/ 
     $('.date-mask').mask("99/99/9999"); 
    }); 
</script> 

とColdFusion/HTML:これは、最初の問題があった場所で、貫通解決されました。

 <cfloop from="1" to="#ArrayLen(labels)#" index="r"> 
     <tr> 
      <td class="labels"><cfif ArrayIsDefined(labels,r) AND labels[r] NEQ "Open">#labels[r]#</cfif></td> 
      <cfloop from="1" to="7" index="i"> 
      <cfif labels[r] NEQ "Other: Describe"> 
       <td id="Day#i#" class="row#r# col#i#"> 
        <cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2> 
        <input type="text" class="date-mask" /><cfelse> 
        <input type="text" 
        <cfif labels[r] EQ "Personal Car: Mileage ##"> id="gasamount#i#" <cfelseif labels[r] EQ "Personal Car: Mileage $">id="gasmoney#i#" </cfif><cfif labels[r] EQ "Daily Totals">id="dailytotals#i#"</cfif> 
        class="<cfif labels[r] EQ "Personal Car: Mileage ##">gasamount<cfelse><cfif labels[r] NEQ "Daily Totals">C#i#</cfif></cfif> 
        <cfif labels[r] EQ "Personal Car: Mileage $">gasmoney<cfelse>calc R#r#</cfif> 
        <cfif labels[r] EQ "Daily Totals">ttlC#i#</cfif> 
" 
         <cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $">readonly="readonly"</cfif> 
         /></cfif> 
         </cfif> 
       </td> 
      </cfif>     
      </cfloop> 
      <cfif labels[r] NEQ "Other: Describe"> 
       <td class="totals"><cfif r EQ 1>Total<cfelse><input type="text" id="totals#r#" class="ttlR#r#" readonly="readonly" /></cfif></td> 
      </cfif> 
     </tr> 
     </cfloop> 

問題は、私は毎日の合計のクラス「CALC」を持っていた、そしてそれは、主要な計算問題を引き起こしていたということでした。 1行追加するだけで簡単でした。お試しいただきありがとうございました。

+3

あなたの質問を2回転載するのではなく、あなたが探していた答えを得るのに十分なだけ元に編集したはずです。 (http://stackoverflow.com/questions/1212433/horizo​​ntal-and-vertical-complicated-javascript-calculation-and-coldfusion)および(http://stackoverflow.com/questions/1208968/complicated-javascript-calculation) –

答えて

1

私の追加は、キーハンドラの終了直前に表示されます。

$('.calc').keyup(function(){ 
    var classArray = $(this).attr('class').split(' '); 

    $.each(classArray, function(){ 
       $('.'+this).sum("keyup", ".ttl"+this); 
       var grandTot = $('.ttl'+this).sum("keyup", ".gTtl"); 
       grandTot; 
     }); 


    var grandTotal = $('.row25').parent().children('td:last').children('input'); 
    var sum = $('.row25').parent().children('td').children('.calc').sum(); 
    grandTotal.val(sum); 
}); 

具体的に:上記の私の解決策/ wの

var grandTotal = $('.row25').parent().children('td:last').children('input'); 
    var sum = $('.row25').parent().children('td').children('.calc').sum(); 
    grandTotal.val(sum); 

私の主な問題は、私が実際にトラブル合計を持っていた行を分離していたということです。 DOMをトラバースして上下に移動するために 'row25'クラスをハードコードしました。最後の行(例:合計行)にクラス名を付けるとよいでしょう。

例:

<tr class="dailyTotals"> ....</tr> 

上記の変更を毎日合計を保持しているTRために作られた場合は、総計計算ラインが変化するであろうと:で、よりエレガントである

var grandTotal = $('.dailyTotals').children('td:last').children('input'); 
var sum = $('.dailyTotals').children('td').children('.calc').sum(); 
grandTotal.val(sum); 

私あなたが選択した命名規則に従っている行をテーブルに追加すると、今後も引き続き動作します。

関連する問題