javascript - 在循环内按下按钮时创建多个元素(输入)

标签 javascript jquery

我的目标是拥有包含开始输入的表单,如果按下旁边的“+”按钮,它将在其下方创建另一个输入。所有这些输入最终都将插入到 AJAX 中。

现在我的表单位于 PHP foreach 循环内,因此我有多个表单,每个表单都有自己的一组输入和按钮。

如果我单击每个表单中的“+”按钮,它将在下面创建一个新输入,但我试图将每个表单限制为 10 个输入,它会像这样跨越所有表单:

enter image description here

因此,在该图像中,我单击第一个表单的“+”按钮 3 次(最多第 4 项),然后在下一个表单中按该按钮,得到第 5 项。

这里的功能基本上可以正常工作,但我需要每个表单都有自己的输入,最多 10 个。这样,如果他们在任何表单上保存项目,我就只能将这些输入传递给 AJAX。

<form id="Items" method="post">

   <label id="ItemLabel">Item 1:</label>
   <input type="text" name="Items[]"><br/>
   <button type="button" class="moreItems_add" onclick="moreItems(this);">+</button>

    <input type="hidden" name="tickerID" id="tickerID" value="xyz">
    <input type="submit" name="saveTickerItems" value="Save Ticker Items">  

</form>

<!-- ticker modal JS -->
<script type="text/javascript">

var maxItems = 1;

function moreItems(button) {
  if (maxItems < 10) {
    var label = document.createElement("label");
    label.id="ItemLabel"+maxItems;
    label.innerHTML = "Item "+(maxItems+1)+": ";
    var input = document.createElement("input");
    input.type='text';
    input.name = 'item'+maxItems;

    $($(label)).insertBefore($(button));
     $($(input)).insertBefore($(button));
     //Insert a line break so that the next label and input are on new line
     $('<br/>').insertBefore($(button));
    maxItems++;
  }
}

</script>

最佳答案

您使用全局变量作为计数器,因此它会随着每个表单的每次使用而递增。为什么不让按钮检查表单中的内容并自行计数?当您使用它时,不妨使用完整的 jQuery。

$("button.moreItems_add").on("click", function(e) {
  var numItems = $("input[type='text']", $(this).closest("form")).length;
  if (numItems < 10) {
    var html = '<label class="ItemLabel">Item ' + (numItems + 1) + ': </label>';
    html += '<input type="text" name="Items[]"/><br/>';
    $(this).before(html);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="Items" method="post">
   <label class="ItemLabel">Item 1:</label>
   <input type="text" name="Items[]"><br/>
   <button type="button" class="moreItems_add">+</button>
   <input type="hidden" name="tickerID" id="tickerID" value="xyz">
   <input type="submit" name="saveTickerItems" value="Save Ticker Items">
</form>

您还按顺序命名了文本输入,我认为这是一个错误?

关于javascript - 在循环内按下按钮时创建多个元素(输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52303234/

相关文章:

javascript - Jquery函数未设置/计算正确的日期

javascript - jQuery UI 可拖动 : Get drag offset of A LOT of dynamically created elements

javascript - jquery 在滚动时更改 div css 并且也改回来

javascript 新关键字和内存泄漏?

java - 如何在 Servlet 上使用 JSON 将多个参数传递给 Ajax

php - 双引号破坏 jQuery(非常简单)

javascript - 导航栏 + 页面选项卡的格式问题

jquery - 如何将 Select2 中的某些单词的字体更改为粗体

jquery - 快速解析 req.body 中的 multipart/form-data post

javascript - 指定用逗号分隔时哪个 jQuery 选择器优先于其他选择器