jQuery UI の Tabs プラグインによる、タブを追加できるタブメニュー

jQuery UI の TabsDialogButton などのプラグインを使った、タブを追加できるタブメニュー。「タブを追加」ボタンを押すと、「タブ追加フォーム」というタイトルのダイアログが現れる。「タブ追加フォーム」ダイアログ内の「追加」ボタンを押すと、タブを追加する。

実装例(サンプル)

タブ 1 の内容。

この実装例の、jQuery UI の CSS テーマは、デフォルトのテーマを読み込んで使っている。他の CSS テーマにも対応しているので、色々試してみるといい。

実装例(サンプル)の動作について

  1. 「タブを追加」ボタンを押すと、「タブ追加フォーム」というタイトルのダイアログが現れる。
  2. 「タブ追加フォーム」ダイアログ内の「追加」ボタンを押すと、「タブ 2」というタイトルのタブを追加する。
  3. 「タブ 2」をクリックすると、タブの内容を確認できる。
  4. 「×」アイコンをクリックすると、タブを削除する。

実装例(サンプル)のソースコード

読み込み

パスは、それぞれ、アップロードした場所を指定する。

<link rel="stylesheet" href="themes/base/jquery.ui.all.css" />
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>

JavaScript

<script>
<!--
jQuery( function() {
    var $tab_title_input = jQuery( '#tab_title' ),
        $tab_content_input = jQuery( '#tab_content' );
    var tab_counter = 2;

    var $tabs = jQuery( '#jquery-ui-tabs' ) . tabs( {
        tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'>Remove Tab</span></li>",
        add: function( event, ui ) {
            var tab_content = $tab_content_input . val() || 'タブ ' + tab_counter + ' の内容。';
            jQuery( ui . panel ) . append( '<p>' + tab_content + '</p>' );
        }
    } );

    var $dialog = jQuery( '#jquery-ui-dialog' ) . dialog( {
        autoOpen: false,
        modal: true,
        buttons: {
            '追加': function() {
                addTab();
                jQuery( this ) . dialog( 'close' );
            },
            'キャンセル': function() {
                jQuery( this ) . dialog( 'close' );
            }
        },
        open: function() {
            $tab_title_input . focus();
        },
        close: function() {
            $form[ 0 ] . reset();
        }
    } );

    var $form = jQuery( "form", $dialog ) . submit( function() {
        addTab();
        $dialog . dialog( 'close' );
        return false;
    } );

    function addTab() {
        var tab_title = $tab_title_input . val() || 'タブ ' + tab_counter;
        $tabs . tabs( 'add', '#jquery-ui-tabs-' + tab_counter, tab_title );
        tab_counter++;
    }

    jQuery( '#add_tab' )
        .button()
        .click( function() {
            $dialog.dialog( 'open' );
        } );

    jQuery( '#jquery-ui-tabs span.ui-icon-close' ).live( 'click', function() {
        var index = jQuery( 'li', $tabs ) . index( jQuery( this ) . parent() );
        $tabs . tabs( 'remove', index );
    } );
} );
// -->
</script>

CSS

<style>
<!--
#jquery-ui-dialog label, #jquery-ui-dialog input {
    display:block;
}
#jquery-ui-dialog label {
    margin-top: 0.5em;
}
#jquery-ui-dialog input, #jquery-ui-dialog textarea {
    width: 95%;
}
#jquery-ui-tabs {
    font-size: 15px;
}
#jquery-ui-tabs li .ui-icon-close {
    float: left; margin: 0.4em 0.2em 0 0; cursor: pointer;
}
#add_tab {
    cursor: pointer;
    font-size: 15px;
    margin: 5px;
}
-->
</style>

HTML

<div id="jquery-ui-dialog" title="タブ追加フォーム">
    <form>
        <fieldset class="ui-helper-reset">
            <label for="tab_title">タイトル</label>
            <input type="text" name="tab_title" id="tab_title" value="" class="ui-widget-content ui-corner-all" />
            <label for="tab_content">内容</label>
            <textarea name="tab_content" id="tab_content" class="ui-widget-content ui-corner-all"></textarea>
        </fieldset>
    </form>
</div>

<button id="add_tab">タブを追加</button>

<div id="jquery-ui-tabs">
    <ul>
        <li><a href="#jquery-ui-tabs-1">タブ 1</a> <span class="ui-icon ui-icon-close">Remove Tab</span></li>
    </ul>
    <div id="jquery-ui-tabs-1">
        <p>タブ 1 の内容。</p>
        <p>この実装例の、jQuery UI の CSS テーマは、デフォルトのテーマを読み込んで使っている。他の CSS テーマにも対応しているので、色々試してみるといい。</p>
    </div>
</div>

スポンサード リンク

カテゴリー: JavaScript, jQuery, jQuery UI, Tabs, メニュー パーマリンク