2010-01-14 121 views
3

我有4个单选按钮(A,B,C,D)。当我点击单选按钮A时,会出现另外两个选项 - A1和A2。其他人也会发生同样的情况。如果我选择D2,则会出现另外两个单选按钮。HTML嵌套单选按钮

我该如何在HTML中做到这一点?

+0

你的意思是嵌套功能或设计是否明智?你有什么尝试,你卡在哪里? – 2010-01-14 01:13:13

+0

3小词:发表一些代码! – 2010-01-14 01:16:10

+0

这是哪里卡住..当我点击苹果..其他选择不会出现.. – pulltab2kan 2010-01-14 01:18:29

回答

1

您只能在文档中的一个元素上使用特定的ID。你必须把每一个元素不同的ID,并让他们分别可见:

<input onclick="document.getElementById('extra1').style.visibility='visible';document.getElementById('extra2').style.visibility='visible';" type="radio" />Apple 

<input type="radio" id="extra1" style="visibility:hidden" other choice here /> 

<input type="radio" id="extra2" style="visibility:hidden" other choice here /> 
+0

这是怎么回事?我不太明白..sorry – pulltab2kan 2010-01-14 01:28:47

+0

@ pulltab2kan:你可以在页面的一个元素上使用id“extra”。您必须给每个单选按钮一个唯一的名称,例如“extra1”和“extra2”。 – Guffa 2010-01-14 01:39:30

1

如果你想要更多的单选按钮出现在选择某一个,我会建议不是“嵌套”他们内部在彼此HTML。当选择一个时,javascript显示隐藏的组或RB。

坦率地说,我认为使用单选按钮来使选择框出现会更方便用户,因为它清楚地表明您正在从不同的组中选择。太多的单选按钮总是看起来很丑。

您的代码的其他问题:id应该是唯一的,将RB文本放在单选按钮旁边,而不是标签内,并尽可能避免使用基于表格的布局。内联javascript和css也应该避免,但由于这是一个代码示例,它实际上使其更具可读性。哦,最重要的是,你有其他按钮设置为出现onclick,所以他们不会消失,如果你取消选择RB:D

0

@guffa我想我只是修改你的答案了一下。把所有的可选单选按钮<div>元件这样内:

<input onclick='document.getElmentById("optional_buttons").style.display="block"' type="radio" /> 
<div id="optional_buttons" style="display: none;" > 
optional radio buttons 
</div> 
6

HTML和CSS3的唯一版本(Fiddle):

HTML为基 “d”(其他基团也同样)

<div> 
    <input type="radio" name="level0" value="D" id="D"/> 
    <label for="D">D</label> 
    <div class="sub1"> 
     <div> 
      <input type="radio" name="level1" value="D0" id="D0"/> 
      <label for="D0">D0</label> 
     </div> 
     <div> 
      <input type="radio" name="level1" value="D1" id="D1"/> 
      <label for="D1">D1</label> 
      <div class="sub2"> 
       <div> 
        <input type="radio" name="level2" value="D10" id="D10"/> 
        <label for="D10">D1-0</label> 
       </div> 
       <div> 
        <input type="radio" name="level2" value="D11" id="D11"/> 
        <label for="D11">D1-1</label> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

CSS

.sub1, .sub2 { display: none; } 

:checked ~ .sub1, :checked ~ .sub2 { 
    display: block; 
    margin-left: 40px; 
} 
+0

非常好的解决方案! – 2015-05-12 15:38:53