【问题标题】:Dynamically build input fields after deletion start index from the highest number?从最高数字删除开始索引后动态构建输入字段?
【发布时间】:2019-04-17 10:03:38
【问题描述】:

我有用户应该能够添加新行的地方。我的逻辑工作正常,所有新字段都变得唯一 id'snames 但是当我删除除最后一行之外的任何其他行时会出现问题。这是我的代码示例:

$("#add_row").on('click', addRow);

function addRow() {
  var index = $(".data-list").children('div').length + 1;
  console.log(index);

  $('.data-list').append(
    '<div class="form-group required data-item">' +
    '<label class="control-label" for="colddesc"><span class="label label-default">Column & Description:</span></label>' +
    '<div class="row">' +
    '<div class="col-xs-12 col-sm-12 col-md-2 col-lg-2">' +
    '<select class="form-control" name="frm_column' + index + '" id="frm_column' + index + '" required>' +
    '<option value="">--Choose--</option>' +
    '<option value="1">Record ID</option>' +
    '<option value="2">Name</option>' +
    '<option value="3">Year</option>' +
    '</select>' +
    '</div>' +
    '<div class="col-xs-12 col-sm-12 col-md-10 col-lg-10">' +
    '<div class="input-group">' +
    '<input class="form-control" type="text" name="frm_descr' + index + '" id="frm_descr' + index + '" placeholder="Enter Description" required>' +
    '<span class="input-group-btn">' +
    '<button class="btn btn-danger btn-remove" type="button"><span class="glyphicon glyphicon-remove"></span></button>' +
    '</span>' +
    '</div>' +
    '</div>' +
    '</div>' +
    '</div>'
  );
};

$(document.body).on('click', '.btn-remove', function() {
  $(this).closest('.data-item').remove();
});
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="data-section">
  <div class="row">
    <div class="form-group col-xs-12 col-sm-12 col-md-12 col-lg-12">
      <button type="button" class="btn" name="add_row" id="add_row">
                                                        <span class="glyphicon glyphicon-plus-sign"></span> Add Row
                                                    </button>
    </div>
  </div>
  <div class="data-list">
    <div class="form-group required data-item">
      <label class="control-label" for="coldesc"><span class="label label-default">Column & Description:</span></label>
      <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-2 col-lg-2">
          <select class="form-control" name="frm_column1" id="frm_column1" required>
            <option value="">--Choose--</option>
            <option value="1">Record ID</option>
            <option value="2">Name</option>
            <option value="3">Year</option>
          </select>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-10 col-lg-10">
          <input class="form-control" type="text" name="frm_descr1" id="frm_descr1" placeholder="Enter Description" required>
        </div>
      </div>
    </div>
  </div>
</div>

如果我再添加两行(总行数 3)并删除第二行,那么下次当用户单击 Add Row 时,索引将从 3 开始,并且该索引已经存在。我想知道如何解决这个问题?有没有从最后一个最高数字开始索引的好方法?

【问题讨论】:

  • 为什么不保留一个计数器并从那里开始呢?毕竟,您只需要它是独一无二的吗?
  • @AlainCruz 我想知道保持计数器索引的最佳方法是什么?是的,我只需要每个索引都是唯一的。
  • 好吧,我只保留一个分配了最后一个 id 的 var。每次你添加一个新的,我都会添加一个。
  • @AlainCruz 你能举个例子吗?谢谢。
  • 我刚做了。希望这能解决您的问题。

标签: javascript jquery indexing


【解决方案1】:

创建一个变量,您将在其中保留分配的最后一个 id。每次你添加一个新的,我都会添加一个。这样,您将始终获得输入的唯一 ID 和名称。您可以检查以下 sn-p 以了解我的意思。

$("#add_row").on('click', addRow);
var counter = 1;

function addRow() {
  counter++;
  console.log(counter);
  $('.data-list').append(
    '<div class="form-group required data-item">' +
    '<label class="control-label" for="colddesc"><span class="label label-default">Column & Description:</span></label>' +
    '<div class="row">' +
    '<div class="col-xs-12 col-sm-12 col-md-2 col-lg-2">' +
    '<select class="form-control" name="frm_column' + counter + '" id="frm_column' + counter + '" required>' +
    '<option value="">--Choose--</option>' +
    '<option value="1">Record ID</option>' +
    '<option value="2">Name</option>' +
    '<option value="3">Year</option>' +
    '</select>' +
    '</div>' +
    '<div class="col-xs-12 col-sm-12 col-md-10 col-lg-10">' +
    '<div class="input-group">' +
    '<input class="form-control" type="text" name="frm_descr' + counter + '" id="frm_descr' + counter + '" placeholder="Enter Description" required>' +
    '<span class="input-group-btn">' +
    '<button class="btn btn-danger btn-remove" type="button"><span class="glyphicon glyphicon-remove"></span></button>' +
    '</span>' +
    '</div>' +
    '</div>' +
    '</div>' +
    '</div>'
  );
};

$(document.body).on('click', '.btn-remove', function() {
  $(this).closest('.data-item').remove();
});
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="data-section">
  <div class="row">
    <div class="form-group col-xs-12 col-sm-12 col-md-12 col-lg-12">
      <button type="button" class="btn" name="add_row" id="add_row">
                                                        <span class="glyphicon glyphicon-plus-sign"></span> Add Row
                                                    </button>
    </div>
  </div>
  <div class="data-list">
    <div class="form-group required data-item">
      <label class="control-label" for="coldesc"><span class="label label-default">Column & Description:</span></label>
      <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-2 col-lg-2">
          <select class="form-control" name="frm_column1" id="frm_column1" required>
            <option value="">--Choose--</option>
            <option value="1">Record ID</option>
            <option value="2">Name</option>
            <option value="3">Year</option>
          </select>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-10 col-lg-10">
          <input class="form-control" type="text" name="frm_descr1" id="frm_descr1" placeholder="Enter Description" required>
        </div>
      </div>
    </div>
  </div>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多