Добавление ввода динамически с использованием jquery правильным способом - PullRequest
0 голосов
/ 16 октября 2019

У меня есть простая форма, в которой я хочу, чтобы пользователь мог динамически добавлять входные данные,

Вот что я пробовал до сих пор.

Форма 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

Что я делаю неправильно ???

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

пожалуйста, проверьте, это может вам помочь.

<!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>
0 голосов
/ 16 октября 2019

Вы можете использовать функцию clone в jquery и изменить клонированный идентификатор div, а затем вы можете добавить новый div в любое место, например:

$('#cloneDiv').click(function(){

  var $div = $('div[id^="DIV_ID_to_clone"]:last');

  // Read the Number from that DIV's ID if you could add a number to your div id (i.e: 3 from "field_1")
  // And increment that number by 1
  var num = parseInt( $div.prop("id").match(/\d+/g), 10 ) +1;

  // Clone it and assign the new ID (i.e: from num 4 to ID "field_2")
  var $cloned= $div.clone().prop('id', 'field_'+num );

  // Finally insert $cloned wherever you want
  $div.after( $cloned.text('field_'+num) );

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...