【问题标题】:Dynamic form with Javascript带有 Javascript 的动态表单
【发布时间】:2016-12-03 00:43:01
【问题描述】:

我正在使用纯 Javascript 制作一个简单的动态表单。我有两个下拉列表,并且希望仅在选择第一个中的某些选项时才显示第二个

HTML:

<form class="form">
  <div class="form-group">
    <select id="box1" name="num">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>

    <select id="box2" name="letters">
      <option value="a">A</option>
      <option value="b">B</option>
    </select>
  </div>
</form>

Javascript:

<script type="text/javascript">
  $("#box1").onchange = function () {
      var box1 = document.getElementById("box1");
      var value = box1.options[box1.selectedIndex].value;

      if (value = "1" || value = "2") {
          $("#box2").show();
      } else {
          $("#box2").hide();
      }
  };
</script>

但这不起作用。我该如何完成这项工作?

【问题讨论】:

  • 您将 Jquery 与纯 javascript 混为一谈。$("#box1").change(function(...
  • $("#box1").onchange ???这不是在 jQuery 中绑定事件的方式...
  • 是的,我的错误,更新了标题

标签: javascript html


【解决方案1】:

有几个问题。首先,你的事件应该改成这样:

$("#box1").on('change', function () {

接下来,您的条件逻辑使用单个“=”,它分配值。这应该更改为双等号或三等号,以检查是否相等。在这里查看区别:JavaScript performance difference between double equals (==) and triple equals (===)

  if (value = "1" || value = "2") {

这是最终代码:

$("#box1").on('change', function () {
  var value = $(this).val();

  if (value === "1" || value === "2") {
      $("#box2").show();
  } else {
      $("#box2").hide();
  }
});

编辑:

这是一个工作演示的链接:

https://jsfiddle.net/pt5yyuLz/

【讨论】:

  • 这对我不起作用,盒子还在。顺便说一句,我把它放在 $(document).ready(function(){}
  • 我遇到了一个奇怪的错误,如果“box2”是输入而不是选择框,则此方法有效
  • 原来我从 silviomoreto.github.io/bootstrap-select 获得的引导选择(用于 css)阻止了它的工作。当我把它拿出来时,它起作用了
【解决方案2】:

只使用 Jquery 或只使用 JS 更易理解和可维护。

您的错误:您使用了= 而不是== 进行比较

事件:使用:selector.change()selector.on("change",...)

这里是一个只有 Jquery 的例子

$(document).ready(function(){
  $(".seconddrop").hide();
  
  $(".firstdrop").change(function(){
    if($(this).val()==1 || $(this).val()==2)
      $(".seconddrop").show(500);
    else
      $(".seconddrop").hide(500);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="firstdrop">
  <option value="0">blabla</option>
  <option value="1">show dropdown 2</option>
  <option value="2">show dropdown 2</option>
</select>

<select class="seconddrop">
  <option value="0">blabla</option>
  <option value="1">blabla</option>
  <option value="2">blabla</option>
</select>

【讨论】:

  • $(".seconddrop").hide();由于某种原因没有隐藏页面加载时的选择
  • @jebmarcus 检查您的选择是否正确,#id 用于选择 id,.class 用于选择一个类。如果它不起作用,请在您的风格中添加display:none;
  • 这太奇怪了,当我在第二个 drop 中直接添加 display:none 时,它​​仍然不会在加载时隐藏
  • 你能解释一下这里的 500 是干什么用的吗?
  • 我遇到了一个奇怪的错误,如果 "box2" 是输入而不是选择框,则此方法有效
猜你喜欢
  • 2020-11-16
  • 2010-09-26
  • 2019-09-21
  • 1970-01-01
  • 2011-06-24
  • 2018-04-13
  • 1970-01-01
  • 2015-12-16
  • 2015-11-08
相关资源
最近更新 更多