首页 > 解决方案 > 添加删除并动态指示编号

问题描述

所以目前我可以轻松添加和删除多个textarea

但我想做的是给每个特定的编号textarea

这是我的文本区域

你注意到我的默认文本区域是Step 1

但我想做的是,当我点击添加时,它会显示另一个文本区域,上面写着

Step 2

  <div class="optionBox">
                <div class="block">
                    <div class="form-group">
                      <label for="exampleFormControlTextarea1">Step 1</label>
                      <textarea class="form-control rounded-0" id="exampleFormControlTextarea1" rows="10"></textarea>
                    </div>

                     <span class="remove">Remove</span>

                </div>
                <div class="block"> <span class="add">Add Option</span>

                </div>
            </div>

我的 Javascript

 $('.add').click(function () {
$('.block:last').before(' <div class="block"><div class="form-group"><label for="exampleFormControlTextarea1">Step</label><textarea class="form-control rounded-0" id="exampleFormControlTextarea1" rows="10"></textarea></div><span class="remove">Remove</span></div>');
});

这是当前的输出

在此处输入图像描述

标签: javascriptjqueryhtml

解决方案


为了完成这项工作,您可以在 each中添加一个span没有内容的元素。然后,您可以创建一个函数,每次添加或删除.label.blockspan.block

我还强烈建议您克隆元素而不是在 JS 逻辑中添加大量 HTML,因为这违反了关注点分离原则,因为将 JS 与 HTML 联系得太紧密。在您的情况下,这可以通过简单地添加一个额外的类来完成,该类.block包含textarea元素。尝试这个:

$('.add').click(function() {
  let $lastBlock = $('.block.step:last');
  let $clone = $lastBlock.clone().insertAfter($lastBlock);
  $clone.find('textarea').val('');
  updateStepCounts();
});

$('.optionBox').on('click', '.remove', function() {
  if ($('.block.step').length > 1) {
    $(this).closest('.block').remove();
    updateStepCounts();
  }
});

let updateStepCounts = () => $('.block label span').text(i => i + 1);
updateStepCounts();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="optionBox">
  <div class="block step">
    <div class="form-group">
      <label for="exampleFormControlTextarea1">Step <span></span></label>
      <textarea class="form-control rounded-0" id="exampleFormControlTextarea1" rows="10"></textarea>
    </div>
    <span class="remove">Remove</span>
  </div>
  <div class="block">
    <span class="add">Add Option</span>
  </div>
</div>


推荐阅读