2013年7月16日火曜日

jQuery TablesorterとjQuery Field Plug-inの合わせ技

チェックボックスの付いたテーブル要素のソーティングがしたかったので、ソーティング機能を持ったjQueryのプラグインである「Tablesorter」とshift+クリックで一括チェック・一括チェック解除が出来る「jQuery Field Plug-in」を併用して使いました。
単純に二つのプラグインを設定したら、ソーティングをした時に、一括チェックが指定した順番にならない現象が生じたので、その対策のメモとして記載したいと思います。

目次

  1. 前提条件
  2. 各プラグインダウンロード先
  3. 対応方法
  4. サンプルプログラム
  5. サンプルプログラム実行結果

前提条件

  • 検証ブラウザ:Firefox 22.0
  • jQueryのバージョン:jquery1.8.3
  • Tablesorterのバージョン:2.0.5
  • jQuery Field Plug-inのバージョン:0.9.6

各プラグインダウンロード先

各プラグインのダウンロード先は以下になります。

対応方法

Tablesorterでソートした後に再度一括チェックのプラグイン「jQuery Field Plug-in」を定義してあげないと、ソートした前の状態でjQuery Field Plug-inが紐付いてしまっている為、予期せぬ場所にチェックが入ってしまいます。
そこで、Tablesorterのソートが終わった時発生するイベント「sortEnd」時に再度定義してあげると動きます。

サンプルプログラム

実際にサンプルプログラムを使って動かしてみます。

<!DOCTYPE HTML>
<html lang="jp">
 <head>
  <meta charset="utf-8">
  <!--ダウンロードしてきたCSSを読み込みます -->
  <link rel="stylesheet" type="text/css" href="themes/green/style.css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  <script src="http://www.pengoworks.com/workshop/jquery/field/jquery.field.min.js"></script>
  <script src="jquery.tablesorter.min.js"></script>
  <script type="text/javascript">
   $(function() {
    //jquery fieldの設定
    $('input:checkbox').createCheckboxRange();
    //tablesorterの設定
    $('#large').tablesorter()
               .bind("sortEnd", function(){
                                   //再設定
                                   $('input:checkbox').createCheckboxRange();
                                });
   });
  </script>
 </head>
 <body>
<table id="large" cellspacing="0" class="tablesorter">
 
 <thead>
   <tr>
   <th>Name</th>

   <th>Major</th>
   <th>Sex</th>
   <th>English</th>
   <th>Japanese</th>
   <th>Calculus</th>
   <th>Geometry</th>
  </tr>
 </thead>
 <tfoot>
  <tr>
   <th>Name</th>

   <th>Major</th>
   <th>Sex</th>
   <th>English</th>
   <th>Japanese</th>
   <th>Calculus</th>
   <th>Geometry</th>

  </tr>
 </tfoot>
 <tbody>
  <tr>
   <td>Student01</td>
   <td>Languages</td>
   <td>male</td>

   <td>80</td>
   <td>70</td>
   <td>75</td>
   <td><form><input type="checkbox" checked=""/></form></td>
  </tr>
  <tr>
   <td>Student02</td>

   <td>Mathematics</td>
   <td>male</td>
   <td>90</td>
   <td>88</td>
   <td>100</td>
   <td><form><input type="checkbox"/></form></td>

  </tr>
  <tr>
   <td>Student03</td>
   <td>Languages</td>
   <td>female</td>
   <td>85</td>
   <td>95</td>

   <td>80</td>
   <td><form><input type="checkbox" checked=""/></form></td>
  </tr>
  <tr>
   <td>Student04</td>
   <td>Languages</td>
   <td>male</td>

   <td>60</td>
   <td>55</td>
   <td>100</td>
   <td><form><input type="checkbox" checked=""/></form></td>
  </tr>
 </tbody>
</table>
 </body>
</html>

サンプルプログラム実行結果

サンプルプログラムを実行した結果は以下のようになります。
Japaneseでソートした後にGeometryを一番上から3番目までシフトを押しながらチェックをしています。

Written By : // 10:49
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。
Powered by Blogger.