在这段代码中,我有两个相关的下拉列表和一个复制/克隆表单的按钮. colored颜色 Select 将根据项目中 Select 的内容进行更改.当我复制下拉列表时,该函数不起作用.我试图更改重复下拉列表的id,但仍然无法匹配2个下拉列表的id.有什么解决办法吗?谢谢

var count = 1;
var duplicate_div = document.getElementById('duplicate_1');

function addRecord() {
  var clone = duplicate_div.cloneNode(true);
  clone.id = "duplicate_" + ++count;
  duplicate_div.parentNode.append(clone);
  var cloneNode = document.getElementById(clone.id).children[0];

  $(clone).find("*[id]").each(function() {
    $(this).val('');
    var tID = $(this).attr("id");
    var idArray = tID.split("_");
    var idArrayLength = idArray.length;
    var newId = tID.replace(idArray[idArrayLength - 1], count);
    $(this).attr('id', newId);
  });
}

$(document).ready(function() {
  $("#item_" + count).change(function() {
    var val = $(this).val();
    if (val == "shirt") {
      $("#color_" + count).html("<option>Black</option> <option>Gray</option>");
    } else if (val == "pants") {
      $("#color_" + count).html("<option>Blue</option> <option>Brown</option>");
    } else if (val == "shoe") {
      $("#color_" + count).html("<option>White</option> <option>Red</option>");
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form class="select-form">
  <div class="duplicate" id="duplicate_1">
    <br>
    <label>item</label>
    <select id="item_1">
      <option value="template" disabled selected></option>
      <option value="shirt">Shirt</option>
      <option value="pants">Pants</option>
      <option value="shoe">Shoe</option>
    </select>

    <label>color</label>
    <select id="color_1">
      <option disabled selected>Select item first</option>
    </select>
  </div>
</form>
<br><br>
<button type="button" id="add-button" onclick="addRecord()">add</button>

推荐答案

既然您已经将jQuery导入到项目中,我建议您充分使用它.

  • 建议使用jQuery的.on方法,而不是onclick属性.
  • 更改事件不会对动态创建的元素起作用.
  • 最后但并非最不重要的一点是,如果id用作 Select 器,您可以删除它们.您可以使用jQuery轻松地跨越DOM

试试这个

$(document).ready(function() {
  var $cloned = $('.duplicate').first().clone(true);
  var $container = $('.select-form');

  $('#add-button').click(function() {
    $container.append($cloned.clone());
  })

  $('.select-form').on('change', '.item', function() {
    var val = $(this).val();
    var $color = $(this).closest('.duplicate').find('.color');

    if (val == "shirt") {
      $color.html("<option>Black</option> <option>Gray</option>");
    } else if (val == "pants") {
      $color.html("<option>Blue</option> <option>Brown</option>");
    } else if (val == "shoe") {
      $color.html("<option>White</option> <option>Red</option>");
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form class="select-form">
  <div class="duplicate">
    <br>
    <label>item</label>
    <select class="item">
      <option value="template" disabled selected></option>
      <option value="shirt">Shirt</option>
      <option value="pants">Pants</option>
      <option value="shoe">Shoe</option>
    </select>

    <label>color</label>
    <select class="color">
      <option disabled selected>Select item first</option>
    </select>
  </div>
</form>
<br><br>
<button type="button" id="add-button">add</button>

Html相关问答推荐

如何使div按钮链接到另一个网页

为什么XPath返回的元素比我预期的要多?

如何从卷轴中排除粘性元素?

如何在HTML中适当地为单选按钮网格添加标签?

如何使用CSS创建文件夹选项卡的形状?

HTML中的ARIA标签:在元素内部还是外部?(&Q;

如何设计缠绕锚点元素的样式?

根据Tailwind CSS中的子计数而非子宽度进行对齐,并水平对齐

HTML 邮箱在 Gmail 中无法正确显示

如何防止弹性项目溢出容器?

如何将图像放在其内部按钮下方

使用 Thymeleaf 将图像水平居中

我真的需要一个容器来让行和列正常工作吗? ( bootstrap 程序 v5)

如何围绕中心zoom svg 并使父级达到其子级大小的 100%

在shiny 的应用程序中使用图标功能时出错

如何在 svelte 中对静态 html 文件使用href=

使用 rgba() 的 css 中的边框不透明度不起作用

使用模板循环每行列出 3 个 bootstrap 卡

当另一个 div 的高度改变或执行其内容的换行时,将 flex 方向更改为列

SVG 适用于 Safari,不适用于 Chrome