隐藏表单没有重新隐藏的问题


Problems with hidden forms not re-hiding themselves

所以我使用CSS来根据单击的单选按钮显示不同的文本框。它基本上是有效的,但我会在代码下面的底部列出问题。

CSS:

.reveal-if-active {

opacity: 0;
  max-height: 0;
  overflow: hidden;
  font-size: 16px;
  -webkit-transform: scale(0.8);
          transform: scale(0.8);
  -webkit-transition: 0.5s;
  transition: 0.5s;
}
.reveal-if-active label {
  display: block;
  margin: 0 0 3px 0;
}
.reveal-if-active input[type=text] {
  width: 50%;
}
input[type="radio"]:checked ~ .reveal-if-active, input[type="checkbox"]:checked ~ .reveal-if-active {
  opacity: 1;
  max-height: 100px;
  padding: 10px 20px;
  -webkit-transform: scale(1);
          transform: scale(1);
  overflow: visible;
}

形式:

        <h1>What group does this person belong to?</h1>
    <br />
    <form action="uploaderPerson.php" method="POST" enctype="multipart/form-data">
        <input type="hidden" name="id" value="<?php echo $_GET["id"]; ?>"/>
        <input type="hidden" name="action" value="2"/>
        <input type="radio" name="option" value="Employer" id="Employer"> Employer<br>
        <div class="reveal-if-active">
        <label for="empname">Employer's Name: </label>
        <input type="text" id="empname" name="empname" class="require-if-active" data-require-pair="#Employer" placeholder="empname">
        <label for="email">Employer's Email: </label>   
        <input type="text" id="email" name="email" class="require-if-active" data-require-pair="#Employer" placeholder="email">
        <label for="phone">Employer's Phone: </label>
        <input type="text" id="phone" name="phone" class="require-if-active" data-require-pair="#Employer" placeholder="phone">
        </div>
        <br />
        <input type="radio" name="option" value="Faculty"> Faculty<br>
        <div class="reveal-if-active">
        <label for="hiredate">Hire Date: </label>
        <input type="text" id="hiredate" name="hiredate" class="require-if-active" data-require-pair="#Faculty" placeholder="hiredate">
        <label for="isretired">Retired?: </label>   
        <input type="text" id="isretired" name="isretired" class="require-if-active" data-require-pair="#Faculty" placeholder="isretired">
        <label for="degreeinstitute">Degree Institute: </label>
        <input type="text" id="degreeinstitute" name="degreeinstitute" class="require-if-active" data-require-pair="#Faculty" placeholder="degreeinstitute">
        </div>
        <br />
        <input type="radio" name="option" value="Student"> Student<br>
        <div class="reveal-if-active">
        <label for="graduation">Hire Date: </label>
        <input type="date" id="graduation" name="graduation" class="require-if-active" data-require-pair="#Student" placeholder="mm/dd/yyyy">
        </div>      

        <br /><br />
        <input type="submit" value="Submit">
    </form>

我的问题是,当我点击一个单选按钮时,它们都会出现。然后,我点击"教员"按钮,"雇主"一号离开,但"学生"一号保持活动状态。然后我点击学生一号,教员一号终于消失了。这不是什么大不了的事,但我想不出我错过了什么。我想它很简单,但我似乎在任何地方都找不到。我知道有几个人使用javascript来帮助处理这类事情,但我在使用它时运气不佳,所以大部分时间都能正常工作。欢迎提供任何意见。

您使用了错误的CSS选择器。

有一种方法可以用纯CSS做到这一点,只要你严格遵守一些规则:

a) 您需要使用+选择器来选择直接同级。b) 你需要确保你的.reveal-if-active是控制它的复选框的直接兄弟

CSS并不意味着要完成这些任务,我强烈建议不要使用CSS来实现这些结果,因为它严重依赖于DOM文档中的细节,您可能需要更改这些细节来实现其他样式要求。但是,如果它需要纯CSS,您可以执行以下操作:

CSS

.reveal-if-active {

opacity: 0;
  max-height: 0;
  overflow: hidden;
  font-size: 16px;
  -webkit-transform: scale(0.8);
          transform: scale(0.8);
  -webkit-transition: 0.5s;
  transition: 0.5s;
}
.reveal-if-active label {
  display: block;
  margin: 0 0 3px 0;
}
.reveal-if-active input[type=text] {
  width: 50%;
}
input[type="radio"]:checked + .reveal-if-active, input[type="checkbox"]:checked + .reveal-if-active {
  opacity: 1;
  max-height: 100px;
  padding: 10px 20px;
  -webkit-transform: scale(1);
          transform: scale(1);
  overflow: visible;
}

HTML

<form action="uploaderPerson.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="id" value="id"/>
    <input type="hidden" name="action" value="2"/>
    <input type="radio" name="option" value="Employer" id="Employer"> Employer
    <div class="reveal-if-active">
    <label for="empname">Employer's Name: </label>
    <input type="text" id="empname" name="empname" class="require-if-active" data-require-pair="#Employer" placeholder="empname">
    <label for="email">Employer's Email: </label>   
    <input type="text" id="email" name="email" class="require-if-active" data-require-pair="#Employer" placeholder="email">
    <label for="phone">Employer's Phone: </label>
    <input type="text" id="phone" name="phone" class="require-if-active" data-require-pair="#Employer" placeholder="phone">
    </div>
    <br />
    <input type="radio" name="option" value="Faculty"> Faculty
    <div class="reveal-if-active">
    <label for="hiredate">Hire Date: </label>
    <input type="text" id="hiredate" name="hiredate" class="require-if-active" data-require-pair="#Faculty" placeholder="hiredate">
    <label for="isretired">Retired?: </label>   
    <input type="text" id="isretired" name="isretired" class="require-if-active" data-require-pair="#Faculty" placeholder="isretired">
    <label for="degreeinstitute">Degree Institute: </label>
    <input type="text" id="degreeinstitute" name="degreeinstitute" class="require-if-active" data-require-pair="#Faculty" placeholder="degreeinstitute">
    </div>
    <br />
    <input type="radio" name="option" value="Student"> Student
    <div class="reveal-if-active">
    <label for="graduation">Hire Date: </label>
    <input type="date" id="graduation" name="graduation" class="require-if-active" data-require-pair="#Student" placeholder="mm/dd/yyyy">
    </div>      

    <br /><br />
    <input type="submit" value="Submit">
</form>

示例jsFiddle

我想你会想要这个例子的。它展示了如何使用javascript隐藏和显示您的复选框,您可能只需要在中再添加几个if

编辑:要使用它,您需要为您的复选框提供javascript/JQuery可以获取的ID