如果选择第一个TD,则禁用一行中的所有其他TD

时间:2010-01-08 08:36:10

标签: jquery conditional traversal

我有一个包含多行的表。每行包含5列(或5个TD)。第一个TD的内部是文本字段和选择框。其他4个TD都包含一个包含一组单选按钮的表。

<tr bgcolor=#ffffff>
<td valign=center>
  <select name=player1>
  <option>0</option>
  <option>1</option>
  </select>
  <input type="text" id="PlayerLocal1" name=p1name size=20>
</td>
<td>
  <table border=1>
    <tr>
      <td>
    <table border=0 cellspacing=0 cellpadding=0>
        <tr>
            <td><input type=radio name=p1o1 value="1B">1B
            <td><input type=radio name=p1o1 value="FO">FO
        </tr>
    </table>
      </td>
    </tr>
  </table></td></tr>

基本上我希望禁用其他4个TD中的每一个中的单选按钮,除非用户在文本字段中输入值或在选择字段中选择一个值。

我正在考虑为每个TR添加一个类,然后以某种方式遍历每个不是第一个TD的TD并删除禁用的属性(启用它),但我无法理解如何创建条件声明或我是否需要使用Parents()或兄弟姐妹()或其他东西来遍历。

快速澄清: 我的表有多行和多列(我只显示了两个TD以节省空间,但其他3个TD看起来就像第二个)。例如,player1和p1name1将是第二行中的player2和p2name2。因此,如果在第一行中更改了text / select,则不应启用所有行中的所有单选按钮 - 只有单选按钮才能显示第一行。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

$('input:radio').attr('disabled', true);

$('select[name=player1], input[name=p1name]').change(function(){
   $('input:radio').attr('disabled', false);
});

我建议在属性周围添加引号,例如name="p1name"而不是name=p1name。当你不这样做时,会发生疯狂的事情。

此外,当您提供元素id或类时,您可以更精确地选择哪些元素,哪些元素不是。比方说,例如,你只想要禁用其中一个单选按钮,你可以轻松地做到这一点,而没有id,它会更加困难。

根据要求:

给选择和输入一个类,比如

<select class="affector"></select>
<input type="text" class="affector" />

你可以这样穿过:

$('.affector').change(function(){
   $(this).parents('tr').find('input:radio').attr('disabled', false);
});

如果你在<tr>中的某个地方有更多的单选按钮,而你只想启用一个选择组,那么让课程更有益。您可以将类选择器替换为.find()中的“input:radio”,只有那些会受到影响。

<强>增加:

如果它们是页面上唯一的选择和文本输入,您也可以放弃添加类并使用类型选择器:

$('select, input:text').change(function(){
   $(this).parents('tr').find('input:radio').attr('disabled', false);
});

答案 1 :(得分:0)

你可以在那些可以使用javascript隐藏的TD周围加一个div。在谷歌搜索将帮助您如何隐藏divs :)。祝你好运!