filterUItitle <div>のクリック時に折りたたみ/展開状態を切り替える
現在の実装は確かにフィルタリングユーザーインターフェースを折りたたむようになっていますが、これを展開する方法がありません。filterUItitle <div>
用のクライアントサイドのclick
イベントハンドラが必要です。これでfilterUI <div>
の表示(隠されている場合)と非表示(表示されている場合)を行います。また、filterUItitle
のCSSクラスをexpandIcon
からcollapseIcon
(またはその逆)に変更する必要があります。
jQueryを使用すると、このような機能を簡単に実装できます。太字で示した5行のJavaScriptをdocument
のready
イベントハンドラに追加するだけで済むのです。
<script type="text/javascript"> $(document).ready(function() { $('#filterUI').hide(); $('#filterUItitle').click(function() { $('#filterUI').slideToggle(400); $('#filterUItitle').toggleClass('expandIcon'); $('#filterUItitle').toggleClass('collapseIcon'); }); }); </script>
slideToggle()
関数は、フィルタリングユーザーインターフェースの表示または非表示を400ミリ秒にわたる上下の動きとしてアニメーション化します。toggleClass(className)
関数は、className
を要素に追加するか(ない場合)、または削除します(ある場合)。そのため、上記の2行のtoggleClass
では、expandIcon
クラスまたはcollapseIcon
クラスがfilterUItitle <div>
から削除され、他方のクラスが追加されます。
これで完了です。実際の動作を確認するには、本稿のサンプルファイルをダウンロードしてください。
これからの課題
ここで実装した機能には1つ問題があります。それは、ページが表示された時点でフィルタリングユーザーインターフェースがいつも折りたたまれた状態になっていることです。つまり、ユーザーがフィルタリングインターフェースを展開し、いったんそのページの表示をやめてから再び表示した場合に、フィルタリングインターフェースを改めて展開する必要があるということです。同様に、ページ上でのあらゆるポストバック(フィルタボタンのクリックやグリッドのソートなど)によってフィルタリングインターフェースが折りたたまれることになります。UpdatePanelを使用すれば、ポストバックを超えてフィルタリングインターフェースの折りたたみ/展開状態を維持することはできますが、複数のページ要求にまたがってユーザーの折りたたみ/展開選択が記憶されるわけではありません。
幸い、ちょっとしたAJAXの機能を利用すれば、ユーザーセッションの間じゅう折りたたみ/展開状態を記憶できます。この記事の後編では、このような機能の追加方法を説明します。
ではそのときまで、ハッピープログラミング!
参考資料
- jQuery.com:jQuery のホームページ(ダウンロードもここから)
- jQueryのチュートリアル
- AJAX Control Toolkit CollapsiblePanel Control