You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击加号图标时jQuery无法动态生成input文本框问题求助

问题:点击加号无法生成新的文本输入框

我想实现点击加号图标时生成新的<input type="text">控件,但点击后没有反应,相关代码如下:

原JS代码

$('#dvDVRdata1 .add').on('click', function() {
  addDynamicTextbox();
});

function addDynamicTextbox() {
  //alert('icon clicked');
  var numItems = $('#dvDVRdata1').length;
  alert(numItems);
  if (numItems != 5) {
    var lastfieldsid = $('#dvDVRdata1 input').last().attr('id');
    if ($('#' + lastfieldsid).val() != "") {
      var id = parseInt(lastfieldsid.substr(13, lastfieldsid.length));
      var tr2 = $("#dvDVRdata1" + id + "");
      var tr = "&lt;tr id='dvDVRdata1" + (id + 1) + "'&gt;&lt;td&gt;&lt;div class=''&gt;&lt;div class=''&gt;&lt;div class='' id='dvDVRdata1" + (id + 1) + "'&gt;&lt;label&gt;DVR Address&lt;/label&gt;&lt;span&gt;&lt;input type='text'  value='' name='nmDVRAddress" + "' id='txtDVRAddress" + (id + 1) + "'/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='minus'&gt;&lt;i class='fa fa-times' aria-hidden='true'&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;"
    }
  }
}

原HTML代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-6" id="dvDVRdata1">
  <div class="form-group">
    <label for="">DVR Address </label>
    <input type="text" class="form-control" id="txtDVRAddress1" runat="server" />
  </div>
  <div class="add">
    <i class="fa fa-plus" aria-hidden="true"></i>
  </div>
</div>

问题分析与修复

你的代码存在几个关键问题,导致新控件无法生成:

  • 数量统计逻辑错误:$('#dvDVRdata1').length是获取父容器的个数,永远为1,根本起不到限制最多5个输入框的作用,应该统计容器内的输入框组数。
  • HTML结构错误:你生成了<tr>标签,但页面里没有对应的<table>容器,浏览器会直接忽略这类不匹配的标签;同时生成的HTML字符串里有多余的闭合标签(比如多了两个</span>)。
  • 核心缺失:未将生成元素插入DOM:你拼好了HTML字符串,但没有执行插入页面的操作,自然看不到新控件。
  • 空值判断限制:如果最后一个输入框为空,就无法新增,这个逻辑如果不是刻意需求,会影响功能测试。

修复后的完整代码

HTML(新增统一容器存放输入框组)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<div class="col-sm-6" id="dvDVRdata1">
  <!-- 用这个容器统一管理所有输入框组 -->
  <div id="inputContainer">
    <div class="form-group">
      <label for="">DVR Address </label>
      <input type="text" class="form-control" id="txtDVRAddress1" runat="server" />
    </div>
  </div>
  <div class="add">
    <i class="fa fa-plus" aria-hidden="true"></i>
  </div>
</div>

JS(修复逻辑并添加DOM插入操作)

$('#dvDVRdata1 .add').on('click', function() {
  addDynamicTextbox();
});

function addDynamicTextbox() {
  // 统计当前输入框组的数量
  var inputGroupCount = $('#inputContainer .form-group').length;
  // 限制最多生成5个
  if (inputGroupCount >= 5) return;

  // 获取最后一个输入框的ID并提取数字部分
  var lastInputId = $('#inputContainer input').last().attr('id');
  var idNum = parseInt(lastInputId.replace('txtDVRAddress', ''));
  var newId = idNum + 1;

  // 检查最后一个输入框是否为空(不需要可删除)
  if ($('#' + lastInputId).val().trim() === '') {
    alert('请先填写当前的DVR地址');
    return;
  }

  // 生成和原有结构一致的输入框组HTML
  var newInputGroup = `
    <div class="form-group">
      <label for="">DVR Address </label>
      <input type="text" class="form-control" id="txtDVRAddress${newId}" name="nmDVRAddress${newId}" runat="server" />
      <div class='minus'>
        <i class='fa fa-times' aria-hidden='true'></i>
      </div>
    </div>
  `;

  // 将新元素插入到容器中
  $('#inputContainer').append(newInputGroup);

  // 给新增的减号绑定删除事件
  $('#inputContainer .minus').last().on('click', function() {
    $(this).closest('.form-group').remove();
  });
}

内容的提问来源于stack exchange,提问作者Nadeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:15:37