JSFiddle - React, Tailwind, and code Playground

by alessandro_pezzato

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<div class="row">
    <div class="col-xs-3"></div>
    <div class="col-xs-6">
        <h1>Nomi</h1>
        <form role="form">
            <div class='names-body'></div>
            <div class='names-footer'>
                <button id="submit" type="submit" class="btn btn-default">Invia</button>
            </div>
        </form>
    </div>
    <div class="col-xs-3"></div>
</div>

JavaScript

$(function () {
    var names = {};
    var nextId = 0;

    var appendNewField = function () {
        $('.names-body').append(createField());
    };

    var createField = function () {
        var id = nextId++;
        var last = true;
        names[id] = {};
       
        var $el = $('<div/>')
            .addClass('input-group form-group');

        var remove = function (e) {
            if (e) e.preventDefault();
            if (last) return;
            $el.fadeOut(function () {
                $el.remove();
            });
            delete names[id];
        }

        var change = function (e) {
            names[id].val = $input.val();
            $input.removeClass('empty');
            if (last) {
                last = false;
                appendNewField();
                $delBtn.removeClass('disabled');
                $delIcon.removeClass('glyphicon-plus')
                    .addClass('glyphicon-remove');
            } else if ($input.val() == '') remove();
        };

        var $input = $('<input type="text"/>')
            .attr('placeholder', 'Aggiungi...')
            .addClass('form-control empty')
            .keyup(change);

        var $delIcon = $('<span class="glyphicon glyphicon-plus">');
        
        var $delBtn = $('<button type="button"></button>')
            .append($delIcon)
            .click(remove)
            .addClass('btn btn-default disabled del-btn');

        $el.append($input)
            .append($('<span class="input-group-btn"/>').append($delBtn));
        
        names[id].$el = $el;

        return $el;
    };

    var send = function (data) {
        if (!data.length) return;
        console.log(data);
        // invia ajax data
    };

    $('#submit').click(function (e) {
        e.preventDefault();
        send($.map(names, function (item) {
            return item.val;
        }));
    });

    appendNewField();
});