提问者:小点点

选中单选按钮时显示div,选中下一个显示另一个div的单选按钮时隐藏先前显示的div?


我是新来的,谢谢你的帮助。

我正在尝试制作一个有5个单选按钮的联系表单,每个单选按钮都有自己的“div”。 div内部是一个“textarea”。 当单选按钮1被选中时,它显示“div”,当单选按钮2被选中时,它显示“div”,但隐藏单选按钮1中选中的“div”。

选中的单选按钮不必是一个序列,它只需要隐藏前一个单选按钮上选中的前一个“div”,并显示当前选中的单选按钮中选中的“div”。

当单选按钮被选中时,它会显示“div”,但当您选择另一个单选按钮时,它不会隐藏“div”(当您选中单选按钮时,所有的“div”都将保持显示)

谁能帮帮忙吗? 非常感谢。

下面是我的代码:

<script type="text/javascript">

function radioCheck(radio) {
data = radio.getAttribute("data")
switch (data) {
case '1':
document.getElementById('ifRadio'+data).style.display = 'block';
break;
case '2':
document.getElementById('ifRadio'+data).style.display = 'block';
break;
case '3':
document.getElementById('ifRadio'+data).style.display = 'block';
break;
case '4':
document.getElementById('ifRadio'+data).style.display = 'block';
break;
case '5':
document.getElementById('ifRadio'+data).style.display = 'block';
break;
default:
document.getElementById('ifRadio1').style.display = 'none';

}
}

</script>  



<!--Radio buttons-->
<div class="col-md-6">  
<label class="radio-inline">1
<input type="radio" onclick="javascript:radioCheck(this);" data=1 name="fid_7" id="showCheck1"></label>

<label class="radio-inline">2
<input type="radio" onclick="javascript:radioCheck(this);" data=2 name="fid_7" id="showCheck2"></label>

<label class="radio-inline">3
<input type="radio" onclick="javascript:radioCheck(this);" data=3 name="fid_7" id="showCheck3"></label>

<label class="radio-inline">4
<input type="radio" onclick="javascript:radioCheck(this);" data=4 name="fid_7" id="showCheck4"></label>

<label class="radio-inline">5
<input type="radio" onclick="javascript:radioCheck(this);" data=5 name="fid_7" id="showCheck5"></label>
</div>

<!--If radio 1-->
 <div id="ifRadio1" style="display:none">
Why did you rate us that way? <br><textarea type="text" id='Radio1' name='yes'></textarea><br>
What’s not working well?<br> <textarea class="form-control" type="text"></textarea>
 </div>
    

<!--If radio 2-->
 <div id="ifRadio2" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='Radio2' name='yes'></textarea><br>
What’s not working well?<br> <textarea class="form-control" type="text"></textarea>
 </div>
          
      
<!--If radio 3-->     
 <div id="ifRadio3" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='Radio3' name='yes'></textarea><br>
How better can we suit your needs? <br><textarea class="form-control" type="text"></textarea>
 </div>        
 
<!--If radio 4-->     
 <div id="ifRadio4" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='ifRadio4' name='yes'></textarea><br>
Do our timing works for you? <br><textarea class="form-control" type="text"></textarea>
 </div>
    
 <!--If radio 5-->     
 <div id="ifRadio5" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='ifRadio4' name='yes'></textarea><br>
Do our timing works for you? <br><textarea class="form-control" type="text"></textarea>
 </div> 

  



 

共3个答案

匿名用户

在这个项目上使用您当前的编码风格,包括数据属性,内联onclick方式中的事件等等,这样您就可以看到这个可能的修复如何与您现有的代码和问题密切相关。

首先,您必须有一种方法来记住哪个div是“打开的”,或者就像下面所演示的那样:在显示相关的div之前隐藏所有div。 它发生得如此之快,不会有任何可见的差别。

null

function radioCheck(radio) {
    data = radio.getAttribute("data")
    
    // Hide all divs
    
    for (var i = 0; i < 5; i++) { // assuming your data attr 1,2,3,..,N
        var el = 'ifRadio' + (i + 1); // ifRadio1, ifRadio2, etc
        document.getElementById(el).style.display = "none";
    }
    
    // Show the current div
    
    var el = 'ifRadio' + (data); // ifRadio1, ifRadio2, etc
    document.getElementById(el).style.display = "block";
}
<div class="col-md-6">  
<label class="radio-inline">1
<input type="radio" onclick="javascript:radioCheck(this);" data=1 name="fid_7" id="showCheck1"></label>

<label class="radio-inline">2
<input type="radio" onclick="javascript:radioCheck(this);" data=2 name="fid_7" id="showCheck2"></label>

<label class="radio-inline">3
<input type="radio" onclick="javascript:radioCheck(this);" data=3 name="fid_7" id="showCheck3"></label>

<label class="radio-inline">4
<input type="radio" onclick="javascript:radioCheck(this);" data=4 name="fid_7" id="showCheck4"></label>

<label class="radio-inline">5
<input type="radio" onclick="javascript:radioCheck(this);" data=5 name="fid_7" id="showCheck5"></label>
</div>

<!--If radio 1-->
 <div id="ifRadio1" style="display:none">
Why did you rate us that way? <br><textarea type="text" id='Radio1' name='yes'></textarea><br>
What’s not working well?<br> <textarea class="form-control" type="text"></textarea>
 </div>
    

<!--If radio 2-->
 <div id="ifRadio2" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='Radio2' name='yes'></textarea><br>
What’s not working well?<br> <textarea class="form-control" type="text"></textarea>
 </div>
          
      
<!--If radio 3-->     
 <div id="ifRadio3" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='Radio3' name='yes'></textarea><br>
How better can we suit your needs? <br><textarea class="form-control" type="text"></textarea>
 </div>        
 
<!--If radio 4-->     
 <div id="ifRadio4" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='ifRadio4' name='yes'></textarea><br>
Do our timing works for you? <br><textarea class="form-control" type="text"></textarea>
 </div>
    
 <!--If radio 5-->     
 <div id="ifRadio5" style="display:none">
Why did you rate us that way? <br><textarea class="form-control" type="text" id='ifRadio4' name='yes'></textarea><br>
Do our timing works for you? <br><textarea class="form-control" type="text"></textarea>
 </div> 

匿名用户

我能给你的解决问题的建议是:

  1. 样式应该在样式表中,因为在动态设置样式时只需添加或删除类就会很有效。 在您的样式表中,您可以使用以下内容:“选择”引用单击的单选按钮的文本,而“不选择”用于隐藏其他单选按钮的文本。

。选择{display:initial;}
。未选择{display:none;}

为了有效地隐藏其余部分,而不需要很长的代码,您可以使用siblings来引用其他单选按钮,并向它们添加类notselected How To Implementing siblings in vanilla javascript

我建议您尝试学习jQuery,因为它可以更轻松地解决您的问题和将来的问题。 要在jQuery中添加或删除类,您只需使用toggleClass()来引用除单击按钮之外的其他单选按钮。使用jQuery,您只需使用siblings()

匿名用户

Stylz,我不知道这是不是你的意思,但我找到的解决方案是这样的:

html表单

<form> 
<input type="radio" name="radio" id="radio0"
    value="radio0">radio0<br> 
    <div id="radio0div">
        u can see me yay.
    </div>

<input type="radio" name="radio1" id="radio1"
    value="radio1">radio1<br>
    <div id="radio1div">
        u can see me yay.
    </div> 
    
<input type="radio" name="radio2" id="radio2"
    value="radio2">radio2<br><br> 
    <div id="radio2div">
        u can see me yay.
    </div>

<button type="button" onclick="display()"> 
    Submit 
</button> 

这是我用来检查收音机是否被检查的脚本。

function display() {  
var div0classes = document.getElementById("radio0div").classList;
var div1classes = document.getElementById("radio1div").classList;
var div2classes = document.getElementById("radio2div").classList;

if(document.getElementById('radio0').checked) { 
    div1classes.add("hidden");
    div2classes.add("hidden");
        
}
else if(document.getElementById('radio1').checked) { 
    div0classes.add("hidden");
    div2classes.add("hidden");
        
} 
else if(document.getElementById('radio2').checked) { 
    div0classes.add("hidden");
    div1classes.add("hidden");
        
}
}

如果这对你有帮助就告诉我! 我是stacksoverflow的新手,所以如果这个评论的格式太差,我很抱歉:)