【问题标题】:Show/hide fieldset based on radio button using Javascript使用 Javascript 基于单选按钮显示/隐藏字段集
【发布时间】:2014-08-27 00:11:26
【问题描述】:

我正在尝试根据用户是选择电话还是电子邮件单选按钮来隐藏或显示联系表单的电子邮件/电话号码部分,但我不知道为什么它不适合我。 我已经搜索了堆栈溢出和 w3Schools,我很确定我使用了正确的语法,但它仍然不会显示/隐藏,具体取决于单选按钮。 任何帮助将不胜感激!

HTML

<form name="contactForm" id="contactForm" method="post" action="result.php">
                <fieldset>
                    <!-- Client's contact details -->
                    <legend>Contact Details</legend>
                        <label for="fullname">Full Name:</label>
                        <input type="text" name="contact" id="fullname" required>

                        <label>Preferred contact method:</label>
                        <input type="radio" name="contact" value="rdoPhone" id="rdoPhone" checked="checked" onclick="cPhone()" >Phone
                        <input type="radio" name="contact" value="rdoEmail" id="rdoEmail" onclick="cEmail()" >Email

                        <label for="phonenumber">Phone Number:</label>
                        <input type="text" name="contact" id="phonenumber">
                        <label for="email">Email:</label>
                        <input type="text" name="contact" id="email">
                </fieldset>
</form>

CSS

#email {
display:none;
}       
#phonenumber {
    display:none;
}

Javascript

function cPhone() {
if (document.getElementById("rdoPhone").checked)
{ document.getElementById("phonenumber").style.display = "block"; }
}

function cEmail(){
if (document.getElementById("rdoEmail").checked)
{ document.getElementById("email").style.display = "block"; }
}

【问题讨论】:

  • 恕我直言,请不要将w3Schools 视为有效来源。
  • 您会推荐哪个网站作为 javascript/html 的更好来源?
  • MDN 供参考,CSSTricks 详细资料...

标签: javascript html forms radio-button show-hide


【解决方案1】:
  • 因为电话号码是默认勾选的,所以一开始不应该隐藏。
  • 您不必在单击单选按钮组中的单选时检查checked 属性,因为单击将始终选中它。

你可以使用一个通用的函数来达到这个目的,如下-

  • 将下面最初给出的hide 类应用于电子邮件。
  • 调用两个无线电的onClick下面给出的函数showHide(this)

css

.hide {
 display:none;
}

js

function showHide(elm) {
 var phone = document.getElementById("phonenumber");
 var email = document.getElementById("email")
 if(elm.id == 'rdoPhone'){
    phone.classList.remove('hide');
    email.classList.add('hide');
 }
 else
 {
    phone.classList.add('hide');
    email.classList.remove('hide');
 }
}

Demo

【讨论】:

  • 谢谢,效果很好。添加/删除具有 CSS 样式的一个类也是一个好主意,它使它更灵活,我也可以在表单的下方使用它。谢谢!
【解决方案2】:

直接在javascript中应用会更快:

$('#id-element').css('display', 'block');

$('#id-element').css('display', 'none');

【讨论】:

  • 这不是 直接 在 javascript 中这是 jquery。
猜你喜欢
  • 2012-09-18
  • 2021-12-08
  • 1970-01-01
  • 2019-03-19
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多