2011-11-09 15 views
1

私はこの問題を数時間にわたって苦労しています。他の投稿でもこの問題は見つかりませんでしたが(.each()メソッドに関連するものが多数見つかりましたが).each()が適切に反復しない

は、とにかくここに私は:

これは私が何時に反復するHTMLです:

<input type="text" id="investment" /><br /> 
<table id="fundTable"> 
     <tr> 
      <td class="rentability"> <span class="someClass"> 0.12 </span> </td> 
      <td class="absoluteResult"></td> 
     </tr> 
     <tr> 
      <td class="rentability"> <span class="someClass"> 0.24 </span> </td> 
      <td class="absoluteResult"></td> 
     </tr> 
     <tr> 
      ... 
</table> 

考え方は次のとおりです。ユーザーは、TextField #investmentに値を入力します。 onChangeの場合、ユーザー入力に.rentability値を掛けて、.absoluteResultテーブルの列にJQueryが入力されます。ここ

を次にjQueryの部分である:

$('#investment').change(function() { 
     var investment = $('#investment').val(), 
      currentlyDisplayedRentability, 
      updatedAbsoluteResult 

     $('#fundTable tr').each(function(index, tableRow) { 
      currentlyDisplayedRentability = $(tableRow + "span").html() 
      currentlyDisplayedRentability = parseFloat(currentlyDisplayedRentability) 
      updatedAbsoluteResult = currentlyDisplayedRentability * investment 
      $(tableRow + "td[class=absoluteResult]").html(updatedAbsoluteResult) 
     }) 
    }) 

何が起こると、すべての行が.absoluteResult.rentabilityカラムの最初の行の値を使用して装着されていることです。 すべての累積に1つの値しか使用されません。 1つの列(.absoluteResult)で正しく.each()が反復処理されていて、他の列(.rentability)には正しくないかのようです。

なぜか分かりません。

+0

をチェックするためのフィドルですあなたのコードで '#fundTable ' $( '#fundTable tr')each(...); ' – Smamatti

+2

' tableRow'変数は文字列ではなく、現在の要素です。おそらく$( "span"、tableRow)、または$(tableRow).find( "span")を意味していました。 – biziclop

+2

@biziclopが正しいです。ここで起こったのは、十分な分割と征服のデバッグを実行していないということです。実際に、複雑なコードに依存してテストするためには、それぞれが適切に反復していないという結論に至りました繰り返し。そのコードで何か問題があれば、テスト全体が中断します。その代わりに、問題の原因として反復の問題を除外するために、 '.each'の内部にある現在のオブジェクトに関する情報を' console.log'する必要があります。 –

答えて

1

これを試してみてください:

$('#investment').change(function() { 
     var investment = parseFloat($('#investment').val()); 

     $('table tr').each(function() { 
      var $tr = $(this); 
      var rentability = parseFloat($tr.find('.someClass').text()); 

      $tr.find('.absoluteResult').html(investment * rentability); 
     }) 
    }) 

コード:http://jsfiddle.net/qYSAH/1/

2

私は問題はあなたが各テーブルの列内を検索するセレクタを使用している方法であると思います。代わりに

$(tableRow + "span").html() 

のこの作品

$(tableRow).find("span").html() 
2

を試してみてください。..ここ

$('#investment').bind('keyup', function() { 
var a = $(this).val(); 
if (!isNaN(parseFloat(a)) && isFinite(a)) { 
    $('table tr').each(function() { 
     var x = $(this).find('td.rentability .someClass').html(); 
     $(this).find('.absoluteResult').html(x * a); 
    }); 
} 
else { $('.absoluteResult').html(''); } 
}); 

は私がidを持つテーブル/ TBODYが表示されていないhttp://jsfiddle.net/BcjMj/

関連する問題