动态添加和删除输入

Posted

技术标签:

【中文标题】动态添加和删除输入【英文标题】:Adding and deleting inputs dynamically 【发布时间】:2017-06-23 15:37:30 【问题描述】:

我想将行添加到已经动态生成的公式中。

这是我尝试做的:

首先我生成视图:

 @foreach($items as $item)
                        <div class="form-group col-sm-2">
                        <input type="text" class="form-control" name="item[]" value="$item->name">
                        </div>
                        <div class="form-group col-sm-1">
                        <button class="btn btn-danger-outline btn-sm" id="deleteitem">
                            <i class="fa fa-trash"></i> Delete
                        </button>
                        </div>
                        <div class="row" id="addrow"></div>
                    @endforeach

我想要的是用自己的删除按钮和相同的 div 生成一个空输入。

这是我的 2 次尝试。

首先使用纯 javascript

        <div class="card-footer">
            <button onclick="addInput(addrow);" type="button" id="addItem" class="btn btn-theme-outline btn-sm"><i class="fa fa-plus"></i>Add item</button>
        </div>

Javascript:

var counter = 0;

function addInput(divName) 

    var inputdiv = document.createElement('div');
    inputdiv.id = "item"+counter;
    inputdiv.className = "form-group col-sm-2";
    inputdiv.innerhtml = "<input type='text' name='myitems[]' class='form-control'>";
    document.getElementById(divName).append(inputdiv);

    var buttondiv= document.createElement('div');
    buttondiv.id = "button"+counter;
    buttondiv.className = "form-group col-sm-1" ;
    buttondiv.innerHTML =  "<button class='btn btn-danger-outline btn-sm'><i class='fa fa-trash'></i> Löschen</button>";
    document.getElementById("item"+counter).append(buttondiv);

    var rowdiv = document.createElement('div');
    rowdiv.id ="row"+counter;
    rowdiv.className = "row";
    document.getElementById("button"+counter).append(rowdiv);


这会在彼此之间创建我显然不想要的 div。此外,新元素是在第一个而不是最后一个 div 之后添加的。

我对 jQuery 的第二次尝试:

    <div class="card-footer">
        <button type="button" id="addItem" class="btn btn-theme-outline btn-sm"><i class="fa fa-plus"></i>Add item</button>
    </div>

Javascript:

$(document).ready(function()
    $("#addItem").click(function()
        $("#addrow").append("<li>Appended item test</li>");
    );
);

这次我尝试了一个 li 来测试它是否会附加到最后一个孩子,而是附加到第一个。

任何想法如何在我每次单击最后一个输入上的新项目按钮时附加/删除@foreach 中的元素?

【问题讨论】:

为什么&lt;div class="row" id="addrow"&gt;&lt;/div&gt; 在每个 foreach 中?你不只需要其中一个吗? " 我尝试了一个 li 来测试它是否会附加到最后一个孩子,但它会附加到第一个孩子。"既然你附加了同样的东西,你怎么知道? 【参考方案1】:

所以您要为循环中的每次迭代复制id='addrow'?你会有一堆重复的 id。它可能附加到第一个 addrow 然后中断。我会将您的整个循环包装在一个容器中,然后附加到该容器中:

<div id="container">
    @foreach($items as $item)
                    <div class="form-group col-sm-2">
                    <input type="text" class="form-control" name="item[]" value="$item->name">
                    </div>
                    <div class="form-group col-sm-1">
                    <button class="btn btn-danger-outline btn-sm" id="deleteitem">
                        <i class="fa fa-trash"></i> Delete
                    </button>
                    </div>
                @endforeach
</div>

$(document).ready(function()
    $("#addItem").click(function()
        $("#container").append("<li>Appended item test</li>");
    );
);

【讨论】:

【参考方案2】:
<div id="group">

@foreach($items as $item)
    <div class="form-group col-sm-2">
    <input type="text" class="form-control" name="item[]" value="$item->name">
    </div>
    <div class="form-group col-sm-1">
    <button class="btn btn-danger-outline btn-sm" id="deleteitem">
        <i class="fa fa-trash"></i> Delete
    </button>
    </div>
@endforeach

</div> <!-- / #group -->

jQuery:

$(document).ready(function()
    $("#addItem").click(function()
        $("#group").append(template);
    );
);

【讨论】:

以上是关于动态添加和删除输入的主要内容,如果未能解决你的问题,请参考以下文章

如何通过闪亮的按钮动态添加/删除输入字段

通过闪亮的按钮动态添加/删除输入字段并保留值

动态添加/删除表单组并为每个输入提供唯一的 ID 和名称

根据来自 QComboBox 的用户输入添加和删除动态生成的 QLineEdit 小部件

angular 7 反应式表单:为表单中的每个输入字段动态添加/删除输入字段

动态添加/删除新输入到表单