0

jQueryの.each()ループで相対値を取得する際に問題が発生しました。テキスト入力とその横にラジオボタンがある一連のテーブル行があります。各行をループしたいのですが、ラジオボタンが選択されている場合は、テキスト入力の値を保存します。

ただし、これまでのところ、ループを実行するたびに、ラジオ値の1つが選択されていることを認識しているようで、どの行に関係なく、最初の入力が自動的に保存されます。各行を実行することで、コードはその特定の行のHTMLでのみ実行されると思いました。代わりに、すべての行に影響を与えていると思います。誰か助けてもらえますか?

これが私のjQueryです:

$('#valueTable tbody tr').each( function() {
   //$(this).css('background', 'blue');

   if($('td input[name=DefaultVal]:checked').size() > 0){
       $('td input[name=DefaultVal]:checked').parent().css('background', 'red')
       selectedDefVal = $('td:first-child input[name=valueTextField]').val();
       //alert(selectedDefVal)
   }  else {
      alert('not checked')
   }
  });

これが私のHTMLです:

<table border="0" id="valueTable">        
<tr>
     <td width="70%" style="white-space: nowrap;"><input size="80" type="text" name="valueTextField" placeholder="Enter Value" value="" ></td>        
     <td width="70%" class="default_container">Default
        <input type="radio" name="DefaultVal" checked="true" class="defaultValFind" />  
    </td>
</tr>
<tr>
     <td width="70%" style="white-space: nowrap;"><input size="80" type="text" name="valueTextField" placeholder="Enter Value" value="2" ></td>        
     <td width="70%" class="default_container">Default
       <input type="radio" name="DefaultVal" class="defaultValFind" /> 
     </td>
</tr>
 <tr>
     <td width="70%" style="white-space: nowrap;"><input size="80" type="text" name="valueTextField" placeholder="Enter Value" value="fffffff" ></td>        
     <td width="70%" class="default_container">Default
       <input type="radio" name="DefaultVal" class="defaultValFind" /> 
     </td>
 </tr>
 </table>
4

2 に答える 2

2

$(this) のようなものを使用する必要があります。

$('#valueTable tbody tr').each(function() {
   if($(this).find('td input[name=DefaultVal]:checked').length){
       $(this).find('td input[name=DefaultVal]:checked').parent().css('background', 'red');
       selectedDefVal = $(this).find('td:first-child input[name=valueTextField]').val();
   }  else {
      alert('not checked')
   }
});
于 2012-12-11T13:14:02.000 に答える
1
$('#valueTable tbody tr').each( function() {
   //$(this).css('background', 'blue');

   if($('td input[name=DefaultVal]:checked', this).size() > 0){
       $('td input[name=DefaultVal]:checked', this).parent().css('background', 'red')
       selectedDefVal = $('td:first-child input[name=valueTextField]', this).val();
       //alert(selectedDefVal)
   }  else {
      alert('not checked')
   }
  });

$ を使用して子要素を選択するときに、親スコープを指定するのを忘れていると思います。省略した場合、デフォルトでウィンドウになります。この .each の場合、これはすべてのループの tr 要素を指します。

于 2012-12-11T13:42:16.663 に答える