2011-08-14 35 views
2

を唱えているが、私はこのような何か生産各行に動的に作成したテーブルがあります。jQueryの式ポスト「のNaN」は、それぞれ値が

<tr name="0"> 
    <td style="text-align:left;">January</td> 
    <td><input type="text" name="LIB1" value="0" class="oneInput row0" /></td> 
    <td><input type="text" name="RPI1" value="0" class="oneInput row0" /></td> 
    <td><input type="text" name="LMM1" value="0" class="oneInput row0" /></td> 
    <td><b><span class="screenOneTotal">0</span></b></td> 
</tr> 

を私は最後の行の各入力の合計を配置する必要があります値が入力されると、列が表示されます。したがって、私は明示的にfloat型にそれぞれの値をキャストしていたという事実にもかかわらず、document.ready機能

$(".oneInput").live('blur', function(){ 
var rowID = $(this).parent().parent().attr('name'); 
var thisLIB = $("input[name=LIB + rowID]").val(); 
var thisRPI = $("input[name=RPI + rowID]").val(); 
var thisLMM = $("input[name=LMM + rowID]").val(); 
var rowTotal = parseFloat(thisLIB) + parseFloat(thisRPI) + parseFloat(thisLMM); 
$(this).parent().parent().find('span.screenOneTotal').empty().html(parseFloat(rowTotal)); 
}); 

でこの機能を配置、最後の列に挿入された値が「NaNは」です。

+0

:このような

何か。 –

答えて

1

と行の下にする必要がありますので、その子はLIB1、LPT1とLMM1ている私はあなたが物事を過度に複雑(とでそれらをundercomplicatingていると思います同時)。あなたの過度の複雑さは、あなたが特定のパターンに合ったものをすべて集めてグループとして扱うことができるときに、3つの特定のものを探して個別に扱うことです。複雑な状況では、障害の状態をparseFloatから考えず、NaNの奇妙な(あなたが使い慣れるまで)動作を考慮していないということです。

DOMの上にある<tr>を見つけてその行のすべての.oneInput要素を反復する方が良いと思うのですが、小さなコードを使って文字列の値を分かりやすい数字に変換することができます同じ方法:

$(".oneInput").live('blur', function() { 
    var $row  = $(this).closest('tr'); 
    var rowTotal = 0; 
    $row.find('input.oneInput').each(function() { 
     var n = parseFloat(this.value); 
     if(!isNaN(n)) 
      rowTotal += n; 
    }); 
    // Do whatever you need to do with rowTotal 
}); 

closest呼び出しがeachとのそれらの上に、ループ、そしてfindoneInputのクラスを持って、その行のすべての<input>の要素を取得します、含む<tr>を見つけるために、DOMを上がりますそれぞれの値をから直接抽出しますDOM要素にparseFloatを追加し、parseFloatが数値を見つけた場合は合計をrowTotalに追加してください(parseFloatにNaNを渡した場合は、isNaNを確認してください)。私はあなたが `NaN`が最初に表示され、計算のどの段階で見つけるために、Firebugのに問題を絞り込むことができますことを確信しているhttp://jsfiddle.net/ambiguous/DBQL3/

+0

+1 。 – naveen

+0

私はjQueryだけでなく、それを学ぶことができると期待しています...これは本当に研究の飼料になります。すべての感謝と私に新しいツール--- jsfiddleを見せてくれてありがとう! – jgravois

+0

あなたのフィドルにはそれが含まれていますが、あなたの答えは、主な問題を引き起こす「

」の不足を完全に無視しています。 –

3

$("input[name=LIB + rowID]").val()が正しく表示されません。

$("input[name=LIB" + rowID + "]").val()を意味しましたか?


あなたの選択に失敗した場合は、.val()は空で、parseFloatはあなたにNaNを与えるだろう。

+0

私は連結がエラーだと思っていますが、提案したように3行を変更したとき、最後の列の値が隠されたり置き換えられたりしなかったと思います。 – jgravois

+0

@jgravois:実例を挙げてください。 –

+0

私の数式は$( "。oneInput")です。live( 'blur'、function(){ var rowID = $(this).parent()。parent()。attr( 'name'); //アラート(rowID); var thisLIB = $( "input [name = LIB" + rowID + "]")。val(); var thisRPI = $( "input [name = RPI" + rowID + "]").val(); var thisLMM = $( "input [name = LMM" + rowID + "]").val(); var rowTotal = parseFloat(thisLIB)+ parseFloat(thisRPI)+ parseFloat(thisLMM); $(this).parent()。parent()。find( 'span.screenOneTotal')。empty().html(rowTotal); }); – jgravois

2

Tomalakの回答に加えて、属性セレクタも引用符で囲む必要があります。あなたの例では、行のname属性が0であることを示しているが、彼らはname='1'

var thisLIB = $("input[name='LIB" + rowID+"']").val(); 
+0

良いスポットです。 –

+0

これは私が仕事のために書いている給与計算の予算申請書からの抜粋です。会計年度は0から始まる配列になっていますが、[0]の値がnullのすべての値が格納されるため、出力するときには+1をfiscalVariableに追加する必要があります – jgravois

関連する問題