在每个循环中获取相对值jQuery

时间:2012-12-11 13:10:26

标签: javascript jquery loops foreach

我在jQuery中的.each()循环中拉出相对值时遇到问题。我有一系列表行,它们旁边有一个文本输入和一个单选按钮。我想循环遍历每一行,如果选中单选按钮,则保存文本输入的值。

但是,到目前为止,每当我运行循环时,它似乎都会识别出其中一个无线电值被选中,然后它会自动保存第一个输入,而不管哪一行。我认为通过遍历每一行,代码只会在特定的行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>

2 个答案:

答案 0 :(得分: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')
   }
});

答案 1 :(得分: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元素。