Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
jQuery UI逆引きリファレンス

jQuery UI逆引きリファレンス

Selectableウィジェットで選択可能なリストを作成するには?

2013年11月28日

マウス・クリックによる単一選択や、マウス・ドラッグによる範囲選択などが実現できるSelectableウィジェットの基本的な使い方を解説。

  • このエントリーをはてなブックマークに追加

jQuery UIとは?

 jQuery UIは、jQueryを拡張するライブラリ(プラグイン)の一種で、名前のとおり、ユーザーインターフェイス(UI)に関わる機能を提供します。jQuery UIの導入方法や使い方、jQuery UIが提供する主要なコンポーネントについては、「jQuery UI逆引きリファレンス: jQuery UIを利用するには?」を参照してください。

 Selectableウィジェットを利用することで、指定された要素配下の子要素群を選択可能にできます。子要素は、マウスのクリックで単一選択できるのはもちろん、[Ctrl]キーを押しながらクリックするか、範囲選択するようにマウスをドラッグすることで複数の要素をまとめて選択することもできます。

 誤解のしようもないシンプルなウィジェットですので、さっそく具体的な例を見ていきましょう。以下は、Selectableウィジェットを利用して、<ul>リストを選択可能にする例です。

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>AutoCompleteウィジェット</title>
<link type="text/css" rel="stylesheet"
  href="http://code.jquery.com/ui/1.10.3/themes/cupertino/jquery-ui.min.css" />
<!--3選択リストのスタイル-->
<style type="text/css">
#list { list-style-type:none; margin: 5px; width: 250px; }
#list li { border: solid 1px #000; color: #fff; margin: 5px; padding: 5px; }
.ui-selectee { background-color: #36c; }
.ui-selected { background-color: #f00; }
.ui-selecting { background-color: #ff0; }
</style>
<script type="text/javascript"
  src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript"
  src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript">
$(function() {
  // 2Selectableウィジェットを適用
  $('#list').selectable();
});
</script>
</head>
<body>
<!--1リストを準備-->
<ul id="list">
  <li>Angular.js </li>
  <li>Backbone.js </li>
  <li>Knockout </li>
  <li>Express.js </li>
  <li>Ext JS </li>
</ul>
<!--選択された項目を表示(あとから利用)-->
<div id="result"></div>
</body>
</html>
選択可能なリストを生成するためのコード(selectable.html)
マウスクリックで選択されたリスト項目が反転
マウスクリックで選択されたリスト項目が反転
範囲選択することでまとめて複数のリストを選択可能に
範囲選択することでまとめて複数のリストを選択可能に

 Selectableウィジェットを利用するには、1のように選択可能なリストを用意したうえで、2のようにselectableメソッドを呼び出します。ただし、Selectableウィジェットの役割は、リスト項目に対して、その時どきの状態に応じてスタイル・クラスを割り当てるまでです。例えば、以下のようにです。

JavaScript
<ul id="list" class="ui-selectable">
  <li class="ui-selectee ui-selecting">Angular.js </li>
  <li class="ui-selectee ui-selected">Backbone.js </li>
  <li class="ui-selectee ui-selected">Knockout </li>
  <li class="ui-selectee ui-selected">Express.js </li>
  <li class="ui-selectee">Ext JS </li>
</ul>
リストに付与されたスタイル・クラス

 それぞれのスタイル・クラスの意味は、以下のとおりです。

スタイル・クラス概要
ui-selectable 選択可能な領域全体
ui-selectee 選択可能な要素
ui-selecting 選択操作中の項目
ui-unselecting 選択が解除された項目
ui-selected 選択された項目
Selectableウィジェットが付与するスタイル・クラス

 サンプルでも、3のようにそれぞれのクラスに応じたスタイルを割り当てることで、選択/非選択状態を視覚的に表しているわけです。

Selectableウィジェットで利用可能なパラメーター

 selectableメソッドには、ハッシュ形式で以下のようなパラメーターを指定できます。

(1)toleranceパラメーター

 Selectableウィジェットによって「項目が選択された」と認識する基準を決定します。デフォルトの「touch」である場合には、マウスの選択範囲が要素の一部に触れたところで「選択された」と見なします。もう1つの設定値「fit」では、マウスの選択範囲が要素を完全に覆ったところで初めて、「選択された」と見なします。

一部が選択領域に入っただけでは、選択状態にならない(fitの場合)
一部が選択領域に入っただけでは、選択状態にならない(fitの場合)
(2)filterパラメーター

 Selectableウィジェットによって選択可能になる子要素を決定します。デフォルトは「*」で全ての子要素が選択可能になります。例えば、以下のようにすることで「class="select"」属性を持つ子要素だけが選択可能になります。

JavaScript
$('#list').selectable({ filter: '.select' });
「class="select"」属性を持つ子要素だけを選択可能にするコード
(3)Selectableウィジェットのイベント

 Selectableウィジェットには以下のようなイベントが用意されており、選択/選択解除などのタイミングで独自の処理を差し挟めるようになっています。下記の表に示すプロパティは、イベント・リスナーの第2引数を経由してアクセスできるイベント固有の情報を表します(戻り値は全てElementオブジェクトです)。

イベント名発生タイミング
プロパティ名
概要
start 選択を開始したとき
stop 選択を終えたとき
selecting 選択動作中
selecting 選択された要素
selected 要素が選択されたとき
selected 選択された要素
unselecting 選択解除中
unselecting 非選択状態になった要素
unselected 要素が選択解除されたとき
unselected 非選択状態になった要素
Selectableウィジェットで利用できるイベント

 例えば、選択された要素を列挙するには、以下のようにします。

JavaScript
$(function() {
  var result;
  $('#list').selectable({
    // 1変数resultを初期化
    start: function() {
      result = '';
      $('#result').text('選択中です。');
    },
    // 2選択された要素を変数resultにセット
    selected: function(e, ui) {
      result += $(ui.selected).text();
    },
    // 3変数resultの内容を表示
    stop: function() {
      $('#result').text(result + 'が選択されました。');
    }
  });
});
選択された要素のテキストを列挙するコード(selectable.html)

 選択された要素は、変数resultにセットするものとします。startイベントで変数resultを初期化しておき(1)、selectedイベントで選択された要素(ui.selected)を変数resultに格納します(2)。selectedプロパティの戻り値はElementオブジェクトなので、textメソッドにアクセスするには、$()関数でjQueryオブジェクトに変換しなければならない点に注意してください。変数resultの内容は、最終的にstopイベントで出力します(3)。

 別解として、selected/stopイベントをまとめて、以下のように書いても同じ意味です。

JavaScript
stop: function() {
  $('#result').text($('.ui-selected').text() + 'が選択されました。');
}
選択された要素を取得

 「class="ui-selected"」属性が付与された要素を選択済みと見なして、そのテキストをまとめて取得しているわけです。

※以下では、本稿の前後を合わせて5回分(第18回~第22回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

jQuery UI逆引きリファレンス
18. AutoCompleteウィジェットの検索/表示方法をカスタマイズするには?

AutoCompleteウィジェットのイベントやメソッドを利用しながら、候補リストの検索/選択時の処理をカスタマイズする方法について説明。

jQuery UI逆引きリファレンス
19. AutoCompleteウィジェットで候補リストをサーバーサイドから取得するには?

AutoCompleteウィジェットの候補リストをサーバーサイドで管理し、Ajax経由でそのリストを取得する方法を解説。

jQuery UI逆引きリファレンス
20. 【現在、表示中】≫ Selectableウィジェットで選択可能なリストを作成するには?

マウス・クリックによる単一選択や、マウス・ドラッグによる範囲選択などが実現できるSelectableウィジェットの基本的な使い方を解説。

jQuery UI逆引きリファレンス
21. Draggable/Droppableウィジェットでドラッグ&ドロップ機能を実装するには?

ページ上の指定された要素をマウスでドラッグ&ドロップできるようにするDraggable/Droppableウィジェットの基本的な使い方を解説。

jQuery UI逆引きリファレンス
22. Progressbarウィジェットでプログレスバーを作成するには?

時間のかかる処理の進行状況をユーザーに対して通知できるProgressbarウィジェットの基本的な使い方を解説。

サイトからのお知らせ

Twitterでつぶやこう!