jQuery UI の Tabs、Dialog、Button などのプラグインを使った、タブを追加できるタブメニュー。「タブを追加」ボタンを押すと、「タブ追加フォーム」というタイトルのダイアログが現れる。「タブ追加フォーム」ダイアログ内の「追加」ボタンを押すと、タブを追加する。
実装例(サンプル)
タブ 1 の内容。
この実装例の、jQuery UI の CSS テーマは、デフォルトのテーマを読み込んで使っている。他の CSS テーマにも対応しているので、色々試してみるといい。
実装例(サンプル)の動作について
- 「タブを追加」ボタンを押すと、「タブ追加フォーム」というタイトルのダイアログが現れる。
- 「タブ追加フォーム」ダイアログ内の「追加」ボタンを押すと、「タブ 2」というタイトルのタブを追加する。
- 「タブ 2」をクリックすると、タブの内容を確認できる。
- 「×」アイコンをクリックすると、タブを削除する。
実装例(サンプル)のソースコード
読み込み
パスは、それぞれ、アップロードした場所を指定する。
<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>
<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>
<!--
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>
<!--
#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>
<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>