下拉菜单条件为jQuery中的两个选项?

时间:2016-02-05 22:33:06

标签: jquery html

我正在用HTML创建一个表单,有两个选项:电话和电子邮件。

请参阅此示例以获取完整示例:https://jsfiddle.net/f6xhbcys/

因此,当用户点击手机时,会在.contact-phone-option div中显示div,如果用户点击了电子邮件,则会在.contact-email-option中显示div。 p>

我编写的代码无效,即使我已经反复检查了我使用过的匹配ID,但似乎无法弄清楚为什么在选择选项时没有发生任何事情。

HTML:                      优选的接触方法                         选择               电话               电子邮件                  

    <div class="contact-phone-option">
        <div class="col-lg-6">
          <label>Phone</label>
          <input id="contact-phone" name="contact-phone" value="" pattern="^\(?\d{3}\)?[- .]?\d{3}[- .]?\d{4}$" type="tel" required/>
        </div>

       <div class="col-lg-6">
          <label>Best Time to Call</label>
          <input id="contact-time" name="contact-time" value="">
        </div>
    </div>

      <div class="col-lg-12 contact-email-option">
        <label>Email</label>
        <input id="contact-email" name="contact-email" value="" required type="email">
      </div>

jQuery的:

// Contact Form Dropdown menu                                                                                    
$('.contact-phone-option, .contact-email-option').hide();
$('#contact-method-menu').change(function () {
    if ($('#contact-phone').is(':selected')) {
        $('.contact-phone-option').show();
        $('.contact-email-option').hide();
    }
    if ($('#contact-email').is(':selected')) {
        $('.contact-email-option').show();
        $('.contact-phone-option').hide();
    }
});

1 个答案:

答案 0 :(得分:0)

您正在检查$('#contact-phone')$('#contact-email') :selected。因为它们是input,所以永远不会发生。您需要检查option :selected。但是,即使只需要该步骤,因为您只需要.val()的{​​{1}}。然后,您可以检查值并匹配“电话”和“电子邮件”。

旁注,你的小提琴缺少jQuery!

select
     // Contact Form Dropdown menu       
    $('.contact-phone-option, .contact-email-option').hide();
    $('#contact-method-menu').on('change', function() {
      if ($('#contact-method-menu').val() == 'Phone') {
        $('.contact-phone-option').show();
        $('.contact-email-option').hide();
      } else if ($('#contact-method-menu').val() == 'Email') {
        $('.contact-email-option').show();
        $('.contact-phone-option').hide();
      }
    });

另一方面注意这一行:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-lg-12">
  <label>Preferred Method of Contact</label>
  <select id="contact-method-menu" name="contact-method-menu" required>
    <option value="">Select</option>
    <option value="Phone">Phone</option>
    <option value="Email">Email</option>
  </select>
</div>

<div class="contact-phone-option">
  <div class="col-lg-6">
    <label>Phone</label>
    <input id="contact-phone" name="contact-phone" value="" pattern="^\(?\d{3}\)?[- .]?\d{3}[- .]?\\
d{4}$" type="tel" required/>
  </div>
  <div class="col-lg-6">
    <label>Best Time to Call</label>
    <input id="contact-time" name="contact-time" value="">
  </div>
</div>

<div class="col-lg-12 contact-email-option">
  <label>Email</label>
  <input id="contact-email" name="contact-email" value="" required type="email">
</div>

你最终会看到这条路线的内容闪现,因为在加载jQuery之前它们不会$('.contact-phone-option, .contact-email-option').hide(); 。您应该考虑隐藏在CSS中,并从那里显示。您还可以将hide()show()来电缩短为:

hide()