prototype scriptaculous.jsを使ったドラッグできるソート処理

11月 4th, 2009 by admin Leave a reply »

scriptaculous.jsを使ったドラッグできるソート処理を書くよ。

下準備。
まずはprototype.js と scriptaculous.jsを呼び出す。

<script src="/js/prototype.js" type="text/javascript"></script>
<script src="/js/scriptaculous/scriptaculous.js" type="text/javascript"></script>

でHTMLソースはこんな感じを想定。

<div id="sortResult">ここに結果</div>
<ul id="sortList">
 <li id="elem_a"><span class="handle">ドラッグ</span>A</li>
 <li id="elem_b"><span class="handle">ドラッグ</span>B</li>
 <li id="elem_c"><span class="handle">ドラッグ</span>C</li>
 <li id="elem_d"><span class="handle">ドラッグ</span>D</li>
</ul>

ソートさせたらその状態をすぐに保存する場合。

   Sortable.create('sortList',{
        constraint:'vertical',
        handle:'handle',
        onUpdate:function(){
           var params = 'order=' + Sortable.serialize('sortList');
           new Ajax.Request('sort.php',
             {
               method: 'post',
               onComplete: getResponse,
               parameters: params
             }
           );
 
           function getResponse(req){
             $('sortResult').innerHTML = req.responseText;
           }
        }
     }
   );

オプションにhandleを指定しているので「ドラッグ」をつまみに使います。
constraintは移動方向制限。’vertical’は垂直方向のみ。
他にもオプションはいっぱいあります。
onUpdateにfunction登録しているのでドラッグ後にsort.phpにPOSTでorderパラメーターに順番が渡されます。

sort.php

foreach ($_POST['order'] as $key => $value){
  //保存処理
  //$key 順番
  //$value エレメント要素
}
echo '変更しました。';

ここでechoした内容がsortResultエレメントに表示されるよ。
成功とか失敗とかアナウンスに使うと良いでしょう。

Advertisement

コメントを残す