2010-01-08 50 views
2

我有一个包含多行的表。每行包含5列(或5个TD)。第一个TD的内部是一个文本框和一个选择框。其他4个TD每个包含一个包含一组单选按钮的表格。如果选择第一个TD,则禁用一行中的所有其他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()或其他东西来遍历。

快速澄清: 我的表有多个行和多个列(我只展示了TD的2,以节省空间,但对方3次达阵看起来就像是第二个)。例如,player1和p1name1将在第二行是player2和p2name2。所以,如果文本/选择在第一行更改,它不应该启用所有行中的所有单选按钮 - 只有单选按钮的第一行。

任何帮助表示赞赏!

回答

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”,只有这些会受到影响。

增加:

如果they''re页面上的唯一选择和文字输入,你也可以放弃添加类别和使用类型选择,而不是:

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

如果有多于一行的选择/文本+单选按钮会怎么样? – Lazarus 2010-01-08 08:45:38

+0

这看起来好像可以工作,但是,我们怎样才能推广这一点。我的表格有多行和多列。例如,player1和p1name1将在第二行是player2和p2name2。所以,如果文本/选择在第一行更改,它不应该启用所有行中的所有单选按钮 - 只有第一行。我会用这个信息更新OP(原始文章)。 – tresstylez 2010-01-08 08:55:47

+0

答案的后半部分应该起作用。一旦你给选择/输入一个普通的类,你将DOM上移到他们的父'tr',然后你在那行中找到单选按钮并启用它们。 – munch 2010-01-08 09:03:03

0

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

+0

我不想要隐藏任何东西,只需禁用表单元素。 – tresstylez 2010-01-08 08:52:48

相关问题