2

我有一个包含多行的表。每行包含 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 并删除 disabled 属性(以启用它),但我无法理解如何创建条件语句或是否我需要使用 parents() 或 Siblings() 或其他东西来遍历。

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

任何帮助表示赞赏!

4

2 回答 2

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>,并且您只想启用一个选择组,那么再次使用类将是有益的。您可以将类选择器替换为 中的“input:radio”,.find()只有那些会受到影响。

添加:

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

$('select, input:text').change(function(){
   $(this).parents('tr').find('input:radio').attr('disabled', false);
});
于 2010-01-08T08:44:48.030 回答
0

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

于 2010-01-08T08:39:32.197 回答