jQuery UI & Tabs: Tabs adding and removing

jQuery UI Tabs – Simple manipulation

Simple tabs adding and removing.

<!doctype html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <title>jQuery UI Tabs - Simple manipulation</title>
    <link rel='stylesheet' href='//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css'>
    <script src='//code.jquery.com/jquery-1.10.2.js'></script>
    <script src='//code.jquery.com/ui/1.10.4/jquery-ui.js'></script>
    <link rel='stylesheet' href='https://codecrawl.com/code/jqueryui/jqueryui_style.css'>
    <style>
        #dialog label, #dialog input {
            display: block;
        }

        #dialog label {
            margin-top: 0.5em;
        }

        #dialog input, #dialog textarea {
            width: 95%;
        }

        #tabs {
            margin-top: 1em;
        }

        #tabs li .ui-icon-close {
            float: left;
            margin: 0.4em 0.2em 0 0;
            cursor: pointer;
        }

        #add_tab {
            cursor: pointer;
        }
    </style>
    <script>
        $(function () {
            var tabTitle = $('#tab_title'),
                    tabContent = $('#tab_content'),
                    tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>",
                    tabCounter = 2;

            var tabs = $('#tabs').tabs();

            // modal dialog init: custom buttons and a 'close' callback resetting the form inside
            var dialog = $('#dialog').dialog({
                autoOpen: false,
                modal: true,
                buttons: {
                    Add: function () {
                        addTab();
                        $(this).dialog('close');
                    },
                    Cancel: function () {
                        $(this).dialog('close');
                    }
                },
                close: function () {
                    form[ 0 ].reset();
                }
            });

            // addTab form: calls addTab function on submit and closes the dialog
            var form = dialog.find('form').submit(function (event) {
                addTab();
                dialog.dialog('close');
                event.preventDefault();
            });

            // actual addTab function: adds new tab using the input from the form above
            function addTab() {
                var label = tabTitle.val() || 'Tab ' + tabCounter,
                        id = 'tabs-' + tabCounter,
                        li = $(tabTemplate.replace(/#\{href\}/g, '#' + id).replace(/#\{label\}/g, label)),
                        tabContentHtml = tabContent.val() || 'Tab ' + tabCounter + ' content.';

                tabs.find('.ui-tabs-nav').append(li);
                tabs.append("<div id='" + id + "'><p>" + tabContentHtml + "</p></div>");
                tabs.tabs('refresh');
                tabCounter++;
            }

            // addTab button: just opens the dialog
            $('#add_tab')
                    .button()
                    .click(function () {
                        dialog.dialog('open');
                    });

            // close icon: removing the tab on click
            tabs.delegate('span.ui-icon-close', 'click', function () {
                var panelId = $(this).closest('li').remove().attr('aria-controls');
                $('#' + panelId).remove();
                tabs.tabs('refresh');
            });

            tabs.bind('keyup', function (event) {
                if (event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE) {
                    var panelId = tabs.find('.ui-tabs-active').remove().attr('aria-controls');
                    $('#' + panelId).remove();
                    tabs.tabs('refresh');
                }
            });
        });
    </script>
</head>
<body>

<div id='dialog' title='Tab data'>
    <form>
        <fieldset class='ui-helper-reset'>
            <label for='tab_title'>Title</label>
            <input type='text' name='tab_title' id='tab_title' value='' class='ui-widget-content ui-corner-all'>
            <label for='tab_content'>Content</label>
            <textarea name='tab_content' id='tab_content' class='ui-widget-content ui-corner-all'></textarea>
        </fieldset>
    </form>
</div>

<button id='add_tab'>Add Tab</button>

<div id='tabs'>
    <ul>
        <li><a href='#tabs-1'>Pitbull</a> <span class='ui-icon ui-icon-close'
                                                role='presentation'>Remove Tab</span></li>
    </ul>
    <div id='tabs-1'>
        <p>Pitbull is a Cuban–American recording artist and Latin Grammy winning rapper from Miami, Florida.</p>
    </div>
</div>


</body>
</html>
Try The Code
Series Navigation<< jQuery UI & Tabs: Sortable tabs