javascript - 如何限制输入的数量并为每个输入创建唯一的 ID?

标签 javascript html

我有这个代码:

$(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 个,并在生成每个输入时为每个输入创建一个唯一的 ID,例如:

#myid1
#myid2
#myid3
#myid4
#myid5

这只是一个可重现的示例,我的实际案例需要更多字段。

$(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;
    });
}); 

但除此之外没有任何作用。如何限制创建的条目数量并为每个条目分配唯一的 id?

最佳答案

jQuery.size() 已在 3.0 版中删除。它已被 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 - 如何限制输入的数量并为每个输入创建唯一的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77228995/

相关文章:

javascript - 将一些数据转换成 json 格式但不确定它是否有效

javascript - CSS:除非页面滚动,否则渐变标题 100% 屏幕宽度很好

html - iPhone/iPad 视口(viewport)问题

html - 如何在 Bootstrap 中居中对齐 "pre-scrollable"类?

html - 图片上的 mailto 链接在 IE 中不起作用

javascript - Typescript - 如何将部分类型分配给另一个对象的相同类型的属性?

javascript - 如何正确使用 Redis 与 Koa (node.js)

javascript - x-可编辑显示的事件下拉列表 (<select/>) 源刷新

html - 如何在我的导航栏中垂直居中放置 Logo ?

javascript - 使用 slideDown()/slideUp() 进行水平溢出