【问题标题】:Showing specific divs depending on which radio button is checked in JavaScript HTML & CSS根据 JavaScript HTML 和 CSS 中选中的单选按钮显示特定的 div
【发布时间】:2018-12-03 20:51:09
【问题描述】:

我无法让我的单选按钮根据选择的单选按钮向用户呈现不同的 Div。默认情况下,单选按钮“矩形”被选中,因此矩形容器 Div 应该是可见的。但是,如果用户选择“椭圆”单选按钮,则应该隐藏 Rectangle-container,并相应地显示 Oval-container Div。

document.onload radioButtonSuperFunction() {
  var PoolShape = "";
  var ex1 = document.getElementsByClassName('RectangleCheck');
  var ex2 = document.getElementsByClassName('OvalCheck');
  var ex3 = document.getElementsByClassName('RoundCheck');
  var ex4 = document.getElementsByClassName('OblongCheck');

  ex1.onclick = radioFunction1;
  ex2.onclick = radioFunction2;
  ex3.onclick = radioFunction3;
  ex4.onclick = radioFunction4;
}

function radioFunction1() {
  document.getElementsByClassName('Rectangle-container').style.display = 'block';
  document.getElementsByClassName('Oval-container').style.display = 'none';
  document.getElementsByClassName('Round-container').style.display = 'none';
  document.getElementsByClassName('Oblong-container').style.display = 'none';
  PoolShape == "Rectangle";
}

function radioFunction2() {
  document.getElementsByClassName('Rectangle-container').style.display = 'none';
  document.getElementsByClassName('Oval-container').style.display = 'block';
  document.getElementsByClassName('Round-container').style.display = 'none';
  document.getElementsByClassName('Oblong-container').style.display = 'none';
  PoolShape == "Oval";
}

function radioFunction3() {
  document.getElementsByClassName('Rectangle-container').style.display = 'none';
  document.getElementsByClassName('Oval-container').style.display = 'none';
  document.getElementsByClassName('Round-container').style.display = 'block';
  document.getElementsByClassName('Oblong-container').style.display = 'none';
  PoolShape == "Round";
}

function radioFunction4() {
  document.getElementsByClassName('Rectangle-container').style.display = 'none';
  document.getElementsByClassName('Oval-container').style.display = 'none';
  document.getElementsByClassName('Round-container').style.display = 'none';
  document.getElementsByClassName('Oblong-container').style.display = 'block';
  PoolShape == "Oblong";
}
.Oval-container,
.Round-container,
.Oblong-container {
  display:none;
}
<span>
  What is the shape of your pool:
  <label class="radio-container">
    <input type="radio" name="radio" class="RectangleCheck" checked="checked">
    <span class="radio-checkmark"></span>Rectangle
  </label>
  
  <label class="radio-container">
    <input type="radio" name="radio" class="OvalCheck">
    <span class="radio-checkmark"></span>Oval
  </label>
  
  <label class="radio-container">
    <input type="radio" name="radio" class="RoundCheck">
    <span class="radio-checkmark"></span>Round
  </label>
  
  <label class="radio-container">
    <input type="radio" name="radio" class="OblongCheck">
    <span class="radio-checkmark"></span>Custom Oblong</label>
</span>



<div class="Rectangle-container">
  Length of your pool in feet
  <input type="number" class="tabinput Length" min="1">

  Width of your pool in feet
  <input type="number" class="tabinput Width" min="1">

  Depth of your pool in feet
  <input type="number" class="tabinput Depth" min="1">
</div>

<div class="Oval-container">
  Half the length of your pool in feet
  <input type="number" class="tabinput HalfLength" min="1">

  Half the width of your pool in feet
  <input type="number" class="tabinput HalfWidth" min="1">

  Depth of your pool in feet
  <input type="number" class="tabinput OvalDepth" min="1">
</div>

<div class="Round-container">
  Radius of your pool in feet
  <input type="number" class="tabinput RoundRadius" min="1">

  Depth of your pool in feet
  <input type="number" class="tabinput RoundDepth" min="1">
</div>

<div class="Oblong-container">
  Small diameter of your pool in feet
  <input type="number" class="tabinput SmallDiameter" min="1">

  Large diameter of your pool in feet
  <input type="number" class="tabinput LargeDiameter" min="1">

  Length of your pool in feet
  <input type="number" class="tabinput OblongLength" min="1">
</div>

任何人都可以推荐一个修复程序以使其正常工作吗?将不胜感激!

【问题讨论】:

  • 这可能不是您唯一的问题,但在设置PoolShape 的值时应使用单个=

标签: javascript html css function radio-button


【解决方案1】:

不需要 JS,只需使用 CSS 在选中的单选按钮旁边显示 div。

如下所示更改您的 HTML 并添加 CSS。

[type="radio"]:not(:checked)+span+div {
  display: none;
}

[type="radio"]:not(:checked)+span+div {
  display: none;
}

label.radio-container {
  display: block;
}
<span>
What is the shape of your pool:

<label class="radio-container">
<input type="radio" name="radio" class="RectangleCheck" checked="checked">
<span class="radio-checkmark"></span>Rectangle
<div class="Rectangle-container">
  Length of your pool in feet
  <input type="number" class="tabinput Length" min="1"> Width of your pool in feet
  <input type="number" class="tabinput Width" min="1"> Depth of your pool in feet
  <input type="number" class="tabinput Depth" min="1">
</div>
</label>



<label class="radio-container">
<input type="radio" name="radio" class="OvalCheck"><span class="radio-checkmark"></span>Oval
<div class="Oval-container">
  Half the length of your pool in feet
  <input type="number" class="tabinput HalfLength" min="1"> Half the width of your pool in feet
  <input type="number" class="tabinput HalfWidth" min="1"> Depth of your pool in feet
  <input type="number" class="tabinput OvalDepth" min="1">
</div>
</label>




<label class="radio-container">
  <input type="radio" name="radio" class="RoundCheck">
  <span class="radio-checkmark"></span>Round
  <div class="Round-container">
  Radius of your pool in feet
  <input type="number" class="tabinput RoundRadius" min="1"> Depth of your pool in feet
  <input type="number" class="tabinput RoundDepth" min="1">
</div>
</label>



<label class="radio-container">
  <input type="radio" name="radio" class="OblongCheck">
  <span class="radio-checkmark"></span>Custom Oblong
  
  <div class="Oblong-container">
  Small diameter of your pool in feet
  <input type="number" class="tabinput SmallDiameter" min="1"> Large diameter of your pool in feet
  <input type="number" class="tabinput LargeDiameter" min="1"> Length of your pool in feet
  <input type="number" class="tabinput OblongLength" min="1">
  </div>
 </label>

</span>

【讨论】:

  • 感谢您的回复!我更喜欢使用 CSS。话虽如此,您的方法在 JSFiddle 中有效,但我无法在我的网站上使用相同的代码。我尝试了许多没有效果的不同解决方案。您的代码处于活动状态的站点的链接是:www.thailandpoolshop.com/calculator
  • 您需要保持完全相同的 html。包含选项的输入、跨度和 div 必须与问题中的一样。您在两者之间使用了 br/ 标签。此外,您的选项 div inst 与输入和跨度平行。这就是它不起作用的原因。
  • html 应该是这样
  • 另外你不应该使用 br/ 标签在元素之间创建空间。改用 margin-bottom css
  • 当我删除 br 标签并在 span ibb.co/cQmwS8 之后保留 div 时,它开始为我工作
【解决方案2】:

这是使用onchange="change('');"的较短代码

您的代码不起作用,因为您在这里忘记了[0] document.getElementsByClassName('..')[0]

function change(name){
 document.getElementsByClassName('Rectangle-container')[0].style.display = 'none';
  document.getElementsByClassName('Oval-container')[0].style.display = 'none';
  document.getElementsByClassName('Round-container')[0].style.display = 'none';
  document.getElementsByClassName('Oblong-container')[0].style.display = 'none';
document.getElementsByClassName(name)[0].style.display="block";

}
.Oval-container,
.Round-container,
.Oblong-container {
  display:none;
}
<span>
What is the shape of your pool:
<label class="radio-container">
   <input onchange="change('Rectangle-container');" type="radio" name="radio" class="RectangleCheck" checked="checked">
   <span class="radio-checkmark"></span>Rectangle
</label>
<label class="radio-container">
  <input onchange="change('Oval-container');" type="radio" name="radio" class="OvalCheck"><span class="radio-checkmark"></span>Oval
  </label>
<label class="radio-container">
  <input onchange="change('Round-container');" type="radio" name="radio" class="RoundCheck"><span class="radio-checkmark"></span>Round
  </label>
<label class="radio-container">
<input onchange="change('Oblong-container');" type="radio" name="radio" class="OblongCheck"><span class="radio-checkmark"></span>Custom Oblong
</label>
</span>



<div class="Rectangle-container">
Length of your pool in feet
<input type="number" class="tabinput Length" min="1">

Width of your pool in feet
<input type="number" class="tabinput Width" min="1">

Depth of your pool in feet
<input type="number" class="tabinput Depth" min="1">
</div>

<div class="Oval-container">
Half the length of your pool in feet
<input type="number" class="tabinput HalfLength" min="1">

Half the width of your pool in feet
<input type="number" class="tabinput HalfWidth" min="1">

Depth of your pool in feet
<input type="number" class="tabinput OvalDepth" min="1">
</div>

<div class="Round-container">
Radius of your pool in feet
<input type="number" class="tabinput RoundRadius" min="1">

Depth of your pool in feet
<input type="number" class="tabinput RoundDepth" min="1">
</div>

<div class="Oblong-container">
Small diameter of your pool in feet
<input type="number" class="tabinput SmallDiameter" min="1">

Large diameter of your pool in feet
<input type="number" class="tabinput LargeDiameter" min="1">

Length of your pool in feet
<input type="number" class="tabinput OblongLength" min="1">
</div>

【讨论】:

  • 完美运行! - 很遗憾我不能用 CSS 完成它,但出于某种原因,就像我向 Nandita 解释的那样,它会自动重新排序我的标签标签之外的 div,尽管我将它们放在我从未遇到过的代码中的标签中前。还是不知道为什么?! =/
【解决方案3】:

上面带有完整css的解决方案也很棒,但是如果您想继续使用JavaScript,那么,

1.document.onload radioButtonSuperFunction() {改为window.onload = function() {,具体原因请参考this link

2. 当您使用document.getElementsByClassName 时,它会返回一个元素数组,因此您必须从该数组中选择特定元素,您不能像var ex1 = document.getElementsByClassName('RectangleCheck'); 那样使用它,因为它不会返回特定的element 而是一个元素数组。

要解决此问题,请使用 var ex1 = document.getElementsByClassName('RectangleCheck')[0]; 仅选择第一个匹配的元素(如果您有许多具有相同类名的元素,这是一个混乱的解决方案)或使用 document.getElementById 通过其 ID 来定位元素。

【讨论】:

    【解决方案4】:

    更改您的 html 代码和 javascript 代码,如下所示。

    1.)html代码

    <span>
      What is the shape of your pool:
      <label class="radio-container">
        <input type="radio" name="radio" class="RectangleCheck" checked="checked" onclick="javascript:radioFunction1();">
        <span class="radio-checkmark"></span>Rectangle
      </label>
    
      <label class="radio-container">
        <input type="radio" name="radio" class="OvalCheck" onclick="javascript:radioFunction2();">
        <span class="radio-checkmark"></span>Oval
      </label>
    
      <label class="radio-container">
        <input type="radio" name="radio" class="RoundCheck" onclick="javascript:radioFunction3();">
        <span class="radio-checkmark"></span>Round
      </label>
    
      <label class="radio-container">
        <input type="radio" name="radio" class="OblongCheck" onclick="javascript:radioFunction4();">
        <span class="radio-checkmark"></span>Custom Oblong</label>
    </span>
    
    <div id="Rectangle-container">
      Length of your pool in feet
      <input type="number" class="tabinput Length" min="1">
    
      Width of your pool in feet
      <input type="number" class="tabinput Width" min="1">
    
      Depth of your pool in feet
      <input type="number" class="tabinput Depth" min="1">
    </div>
    
    <div id="Oval-container" style="display:none">
      Half the length of your pool in feet
      <input type="number" class="tabinput HalfLength" min="1">
    
      Half the width of your pool in feet
      <input type="number" class="tabinput HalfWidth" min="1">
    
      Depth of your pool in feet
      <input type="number" class="tabinput OvalDepth" min="1">
    </div>
    
    <div id="Round-container" style="display:none">
      Radius of your pool in feet
      <input type="number" class="tabinput RoundRadius" min="1">
    
      Depth of your pool in feet
      <input type="number" class="tabinput RoundDepth" min="1">
    </div>
    
    <div id="Oblong-container" style="display:none">
      Small diameter of your pool in feet
      <input type="number" class="tabinput SmallDiameter" min="1">
    
      Large diameter of your pool in feet
      <input type="number" class="tabinput LargeDiameter" min="1">
    
      Length of your pool in feet
      <input type="number" class="tabinput OblongLength" min="1">
    </div>
    

    2.)javascript 代码

    var PoolShape = "";
    
    function radioFunction1() {
    
      document.getElementById('Rectangle-container').style.display = 'block';
      document.getElementById('Oval-container').style.display = 'none';
      document.getElementById('Round-container').style.display = 'none';
      document.getElementById('Oblong-container').style.display = 'none';
      PoolShape == "Rectangle";
    }
    
    function radioFunction2() {
      document.getElementById('Rectangle-container').style.display = 'none';
      document.getElementById('Oval-container').style.display = 'block';
      document.getElementById('Round-container').style.display = 'none';
      document.getElementById('Oblong-container').style.display = 'none';
      PoolShape == "Oval";
    }
    
    function radioFunction3() {
      document.getElementById('Rectangle-container').style.display = 'none';
      document.getElementById('Oval-container').style.display = 'none';
      document.getElementById('Round-container').style.display = 'block';
      document.getElementById('Oblong-container').style.display = 'none';
      PoolShape == "Round";
    }
    
    function radioFunction4() {
      document.getElementById('Rectangle-container').style.display = 'none';
      document.getElementById('Oval-container').style.display = 'none';
      document.getElementById('Round-container').style.display = 'none';
      document.getElementById('Oblong-container').style.display = 'block';
      PoolShape == "Oblong";
    }
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签