我有这样的代码:

$(function() {
  var scntDiv = $('#p_scents');
  var i = $('#p_scents p').size() + 1;

  $('#addScnt').live('click', function() {
    $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i + '" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
    i++;
    return false;
  });

  $('#remScnt').live('click', function() {
    if (i > 2) {
      $(this).parents('p').remove();
      i--;
    }
    return false;
  });
});
input {
  padding: 5px;
  border: 3px solid #999;
  border-radius: 8px;
  margin-bottom: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<button id="addScnt" style='margin-bottom: 15px;'>Add (limit 5)</button>

<div id="p_scents">
  <p>
    <label for="p_scnts"><input type="text" id="p_scnt" class="p_scnt" size="20" name="p_scnt" value="" placeholder="Input Value" /></label>
  </p>
</div>

我希望将新输入的创建限制为5个,并在它们生成时 for each 输入创建一个唯一的ID,如下所示:

#myid1
#myid2
#myid3
#myid4
#myid5

这只是一个可重现的例子,我需要为我的真实 case 更多的领域.

$(function() {
    var scntDiv = $('#p_scents');
    var i = $('#p_scents p').size() + 1;

    $('#addScnt').on('click', function() {
        if (i <= 4) { // 5 inputs limit
            $('<p><label for="p_scnts"><input type="text" id="p_scnt_' + i + '" class="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" class="remScnt">Remove</a></p>').appendTo(scntDiv);
            i++;
        }
        return false;
    });

    $(document).on('click', '.remScnt', function() { 
        if (i > 2) {
            $(this).parents('p').remove();
            i--;
        }
        return false;
    });
}); 

但其他方法都不管用.如何限制创建的条目数量并 for each 条目分配唯一的ID?

推荐答案

版本3.0中已删除了jQuery.size().它已经被jQuery.length取代了.我更改了代码的第三行,现在它可以工作了,如下所示:

$(function() {
 let scntDiv = $('#p_scents');
 let id=0, i = $('#p_scents p').length + 1;

$('#addScnt').on('click', function() {
    if (i <= 4) { // Limita a 5 campos
        $('<p><label for="p_scnts"><input type="text" id="p_scnt_' + (++id) + '" class="p_scnt" size="20" name="p_scnt_' + id +'" value="" placeholder="Input Value" /></label> <a href="#" class="remScnt">Remove</a></p>').appendTo(scntDiv);
        i++;
    }
    return false;
});

$(document).on('click', '.remScnt', function() { 
    if (i > 2) {
        $(this).parents('p').remove();
        i--;
    }
    return false;
});
});
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<button id="addScnt">add scent</button>
<div id="p_scents">
</div>

我修复了一个明显的错误,可能会重复id.这只是一个快速解决方案,但它将保证唯一的ID.

Javascript相关问答推荐

reaction useEffect KeyDown for each 条目配音输出

为什么JavaScript双边字符串文字插值不是二次的?

React Hooks中useState的同步问题

无法将nPM simplex-noise包导入在JS项目中工作

使用redux-toolet DelivercThunks刷新访问令牌

一次仅播放一个音频

通过在页面上滚动来移动滚动条

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

更改预请求脚本中重用的JSON主体变量- Postman

JavaScript是否有多个`unfined`?

Reaction Redux&Quot;在派单错误中检测到状态Mutations

Next.js中的服务器端组件列表筛选

FireBase云函数-函数外部的ENV变量

如何使本地html页面在重新加载时保持当前可隐藏部分的打开状态?

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

MongoDB中的嵌套搜索

更改agGRID/Reaction中的单元格格式

如果NetSuite中为空,则限制筛选

我怎样才能得到一个数组的名字在另一个数组?