0

我在 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>
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 回答