現在のページは:Top < ColdFusion < コードサンプル集 Index < ColdFusion(順序 並び替え)

ColdFusion(順序 並び替え)

jQuery UIの提供するsortables機能を使用して、ドラッグによる順序の並べ替えを可能にします。
サンプルではColdFusionのAjax機能も使用していますが、ここではまずsortables機能について紹介します。Ajax機能については「ColdFusion(Ajax機能1)」をご覧ください。

コードと動き

※移動したい行のアイコンをドラッグして、希望の位置に配置します。
 「この並びで保存する」ボタンをクリックし、その状態を維持します。




Sortablesを使用するためには、jQuery本体とjQuery UIを最初に読み込む必要があります。 (「1.事前準備」参照)

<!--- jQuery本体 --->
<script src="js/jquery-1.2.6.min.js"
    type="text/javascript"></script>
<!--- jQuery UI --->
<script src="js/ui/jquery.ui.all.js"
    type="text/javascript"></script>

必要なCSSプロパティを設定します。 (「2.設定されるクラス」参照)
ここでは、並べ替え可能な領域でのカーソルの形状を変更します。

<style type="text/css">
  .ui-sortable { /* 並べ替え可能な要素 */
    cursor:move; /* カーソルの形状を変更 */
  }
</style>

HTMLで適用する要素、フォームなどを設定します。

<!--- 適用する要素 --->
<ul id="sortList">
  <li id="1">
    <img src="../img/coldfusion/page.png" />  
    <a href="http://www.digital-moon.com/coldfusion/
    sample_image.cfm">ColdFusion (画像認証)</a>
  </li>
  <li id="2">
    <img src="../img/coldfusion/page.png" />  
    <a href="http://www.digital-moon.com/">
    デジタルムーン トップページ</a>
  </li>
  <li id="3">
    <img src="../img/coldfusion/page.png" />  
    <a href="http://www.sarari.cc/">
    簡単ホームページ作成CMS「さらり」</a>
  </li>
  <li id="4">
    <img src="../img/coldfusion/page.png" />  
    <a href="http://www.t-clip.info/">
    宝塚文化振興財団WEB</a>
  </li>
</ul>

<!--- フォーム --->
<center>
<form action="" method="post">
  <input type="hidden" id="sortId" name="sortId" />
  <input type="submit" id="submit" name="submit"
      value="この並びで保存する" disabled="disabled" />
</form>
</center>

最後に、JavaScriptでsortableメソッドを呼び出し、並べ替えを可能にします。 (「3.使用方法」参照)

<script type="text/javascript">
$(function() {
  //sortableオプション
  var option={ 
    // 並べ替え可能な要素
    items : 'li', 
    // ドラッグ可能な要素
    handle : 'img',
    // 並べ替え終了直後に実行される関数
    stop : function(){
      // 並べ替えた順番を保存します
      var sort_id=[];
      $('li','#sortList').attr('id',function(i){
        sort_id.push(this.id);
      });
      $('#sortId').val(sort_id.toString())
    },
    // 並べ替え終了後に位置が入れ替わっていたら
	// 実行される関数
    update : function(){
      // ボタンを有効にします
      $('#submit').removeAttr('disabled'); 
    }
  };
  //sortable実行
  $('#sortList').sortable(option);
});
</script>

説明

  1. 事前準備
    jQuery」と「jQuery UI」をダウンロードし、参照可能なディレクトリに展開してください。
    ※ここで使用しているバージョンは、jQuery1.2.6、及び、jQuery UI1.5.1です。
  2. 設定されるクラス
    • ui-sortable:並べ替え可能な要素
    • ui-sortable-disabled:並べ替えは無効
    • ui-sortable-helper:移動中を示す要素
    sortable()が実行されると、ui-sortableがclass属性に追加されます。
    .ui-sortableに対してCSSプロパティを設定して、並べ替え可能である事をユーザーに示す事ができます。
  3. 使用方法
  • 要素を並べ替えられるようにする方法
    $( 要素 ).sortable([{ オプション1:値1,...}]);

オプション
items 並べ替え可能な要素を指定します(デフォルトは'>*')
handle ドラッグ可能な要素を制限します
※サンプルのように、移動は行単位、ドラッグはアイコンだけという動作ができるので、とても便利です。
start 並べ替えの開始直後に実行する処理(コールバック関数)
stop 並べ替えの終了直後に実行する処理(コールバック関数)
sort 並べ替えの途中に実行する処理(コールバック関数)
change 並べ替えの途中に項目が入れ替わったときに実行する処理
(コールバック関数)
update 並べ替え終了後に項目が入れ替わっていたら実行する処理
(コールバック関数)
connectWith 移動できる範囲を別の領域に広げることができます
(配列で記述、各領域ごとに設定)
placeholder ドラッグ後に移動される位置を表示するCSSクラス名を指定します
revert ドラッグ終了後に位置がずれている時に、目標とする位置まで移動する時間を変更できます(true、又は、1秒を1000とする数値)
axis ドラッグによる移動が可能な方向を制限します
('x'なら横方向のみ、'y'なら縦方向のみ、デフォルトは'x','y')
scroll 親要素をスクロールするかを指定します(デフォルトはtrue)
scrollSensitivity スクロールを開始する端までの距離を数値で指定します
(デフォルトは20)
scrollSpeed 何ピクセルスクロールするかを数値で指定します(デフォルトは20)
helper ドラッグ中の表示方法を指定します(関数を指定できます)
opacity helperの不透明度を指定します
containment ドラッグの範囲を指定された範囲内に制限します
'parent'(親要素内)、'document'(Webページ内)、DOM要素、jQueryセレクタを指定
zindex z-indexを数値で指定します
cursor ドラッグ中におけるカーソルの形状を指定できます
(CSSプロパティcursorの値)

  • sortableを有効にする
    $( 要素 ).sortable('enable');
    (ui-sortable-disabledがclass属性から削除されます。)
  • sortableを無効にする
    $( 要素 ).sortable('disable');
    (ui-sortableがclass属性に追加されます。)
  • sortableを解除する
    $( 要素 ).sortable('destroy');
    (ui-sortable,ui-sortable-disabledがclass属性から削除されます。)
  • 項目からGETパラメータ形式の文字列を生成
    $( 要素 ).sortable('serialize'[ ,{ オプション1:値1,...}]);
    (デフォルト:id属性の値に-,=,_のどれかが含まれていたら、その両側にある部分を[]=で連結されます。)
  • 子要素に関する情報を更新する
    $( 要素 ).sortable('refresh');
  • 子要素の表示位置に関する情報を更新する
    $( 要素 ).sortable('refreshPositions');

注意メモ

  1. a タグをドラッグ可能にすると、クリックしてもリンク先のページに遷移しません。
    そのため、ここではhandleを使用して、img タグのみをドラッグ可能とし、a タグはドラッグできないようにしています。

(Hoshino 2008/07/18)

店舗経営の皆様へ | 企業学校経営の皆様へ | 開発会社をお探しの方へ
ホーム | 事業案内 | 制作実績 | Webアプリ開発(ColdFusion) | 会社案内 |  お問合せ | サイトマップ