javascript - 以正确的方式使用 jquery 动态添加输入

标签 javascript jquery html css bootstrap-4

我有一个简单的表单,我希望用户能够在其中动态添加输入,

这是我到目前为止尝试过的方法。

HTML 表单看起来像这样

enter image description here

上述表格的HTML代码

<form>
    <dvi class="container h-100">
        <div class="d-flex justify-content-center">
            <div class="card mt-5 col-md-12 animated bounceInDown myForm">
                <div class="card-header">
                    <h4>Bidders Information</h4>
                </div>
                <div class="card-body">
                    <form>
                        <div id="dynamic_container">
                            <div class="input-group">
                                <div class="input-group-prepend">
                                    <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                </div>
                                <input type="text" placeholder="Bidders Name" class="form-control" />
                            </div>
                            <div class="input-group mt-3" id="field">
                                <div class="input-group-prepend">
                                    <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                </div>
                                <input type="text" placeholder="atribute name" id="field1" class="form-control" />
                                <input type="text" placeholder="atribute value" id="field2" class="form-control" />
                                <a class="btn btn-secondary btn-sm" id="add_more_input">
                                    <i class="fa fa-minus-circle"></i> Add
                                </a>
                            </div>

                        </div>
                    </form>
                </div>
                <div class="card-footer">
                    <a class="btn btn-secondary btn-sm" id="add_more"><i class="fa fa-plus-circle"></i> Add</a>
                    <a class="btn btn-secondary btn-sm" id="remove_more"><i class="fa fa-trash-alt"></i> Remove</a>
                    <button class="btn btn-success btn-sm float-right submit_btn"><i class="fas fa-arrow-alt-circle-right"></i> Submit</button>
                </div>
            </div>
        </div>
    </dvi>
    </div>
    <div class="card-footer ml-auto mr-auto">
        <button type="submit" class="btn btn-primary">{{ __('Add Page') }}</button>
    </div>
    </div>
</form>

这是动态添加输入的jquery代码

var next = 1;
$("#add_more_input").click(function(e) {
    e.preventDefault();
    var addto = "#field" + next;
    var addRemove = "#field" + (next);
    next = next + 1;
    var newIn = '<div class="input-group mt-3" id="field"><div class="input-group-prepend"><span class="input-group-text br-15"><i class="fa fa-tags"></i></span></div><input type="text" placeholder="atribute name" class="form-control" id="field' + next + '" name="field' + next + '"/>  <input type="text" placeholder="atribute value" class="form-control" id="field' + next + '" name="field' + next + '"/></div> ';

    var newInput = $(newIn);
    var removeBtn = '<a id="remove' + (next - 1) + '" class="btn btn-secondary btn-sm remove-me add_more_input"><i class="fa fa-minus-circle"></i> Add</a></div><div id="field';
    var removeButton = $(removeBtn);
    $(addto).after(newInput);

    $(addRemove).after(removeButton);
    $("#field" + next).attr('data-source', $(addto).attr('data-source'));
    $("#count").val(next);

    $('.remove-me').click(function(e) {
        e.preventDefault();
        var fieldNum = this.id.charAt(this.id.length - 1);
        var fieldID = "#field" + fieldNum;
        $(this).remove();
        $(fieldID).remove();
    });
});

现在,当用户点击按钮添加输入行时,我得到以下结果

enter image description here

但预期的结果应该是这样的

enter image description here

这是 jsfiddle DEMO

我做错了什么???

最佳答案

请检查它可能对你有帮助。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .myForm {
            background-color: rgb(156, 39, 176) !important;
            padding: 15px !important;
            border-radius: 15px !important;
            color: white;

        }

        input {
            border-radius: 0 15px 15px 0 !important;

        }

        input:focus {
            outline: none;
            box-shadow: none !important;
            border: 1px solid #ccc !important;

        }

        .br-15 {
            border-radius: 15px 0 0 15px !important;
        }

        #add_more {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;

        }

        #add_more_input {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;

        }

        .add_more_input {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;
        }

        #remove_more {
            color: white !important;
            background-color: #fc5c65 !important;
            border-radius: 15px !important;
            border: 0 !important;
            display: none;

        }

        .submit_btn {
            border-radius: 15px !important;
            background-color: #95c714 !important;
            border: 0 !important;
        }
    </style>
</head>

<body>


    <link rel="stylesheet" type="text/css"
        href="https://github.com/throne1986/roayalad-blog/blob/master/public/material/css/material-dashboard.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">

    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

    <form>
        <dvi class="container h-100">
            <div class="d-flex justify-content-center">
                <div class="card mt-5 col-md-12 animated bounceInDown myForm">
                    <div class="card-header">
                        <h4>Bidders Information</h4>
                    </div>
                    <div class="card-body">
                        <form>
                            <div id="dynamic_container">
                                <div class="input-group">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="Bidders Name" class="form-control" />
                                </div>
                                <div class="input-group mt-3" id="field">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="atribute name" id="field1" class="form-control" />
                                    <input type="text" placeholder="atribute value" id="field2" class="form-control" />
                                    <a class="btn btn-secondary btn-sm" id="add_more_input">
                                        <i class="fa fa-minus-circle"></i> Add
                                    </a>
                                </div>

                            </div>
                        </form>
</body>
<script>


   var iteration = 1;
    document.getElementById('add_more_input').addEventListener('click', function () {
        var content = `<div class="input-group mt-3" id="field${iteration}">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="atribute name" id="field${iteration}" class="form-control" />
                                    <input type="text" placeholder="atribute value" value="${iteration} "id="field2" class="form-control" />
                                    <a class="btn btn-secondary btn-sm" onclick="remove(event)">
                                        <i class="fa fa-minus-circle"></i> remove
                                    </a>
                  </div>
     `;
        var parsedContent = new DOMParser().parseFromString(content, 'text/html').body.firstChild;
        document.getElementById('dynamic_container').appendChild(parsedContent);
        iteration++;
    })

 function remove(e){
    e = e || window.event;
    document.getElementById('dynamic_container').removeChild(e.target.closest('.input-group'))
    console.log(e.target.closest('.input-group'))
 }


</script>

</html>

关于javascript - 以正确的方式使用 jquery 动态添加输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58410824/

相关文章:

jquery - 溢出时向水平列表添加箭头

jquery - 如果包含类为 ="dropdown-menu"的 UL,则将类添加到父 LI

javascript - 在JS代码中加载脚本有什么优点和缺点

html - 是否有一种 pre-CSS3 方法可以使 div 向上翻译与其高度相同的量?

javascript - 根据两个条件(重复的 mac 地址和使用条件小于或大于)从 JavaScript 中的对象数组中删除对象

javascript - 使用 TreeData 功能时如何更新 ag-grid 数据

javascript - JavaScript 中的垂直 slider

php - 日期 highstock highchart

javascript - JSON 中的 HTML 标签不允许解析它

javascript - Jquery 触发器可以工作 Chrome、IE,但不能工作 Firefox