Movable Type 備忘録

 MagicPreview with jQuery

  • Nov222008
  • Vote:
    http://bizcaz.com/archives/2008/11/22-224354.php
  • Categories: jQuery
  • Tags:
  • Social Bookmark

こんばんわ^^

今週は TOPIC でもピックアップしてますが、気になった jQuery のプラグインを結構見つけたので使ってみました。
まずは、input や textarea などフォームに入力した内容をリアルタイムに表示してくれる MagicPreview プラグインです。

サンプルを表示できませんでした。

特に見新しいものではなく、以前からフォームの内容をリアルタイムに表示するスクリプトはありましたけど、上記サンプルのように選択したオプションに該当するイメージを表示したりなど、ハンドラを登録することで入力した値を加工して表示したりできます。
MagicPreview プラグインは以下から入手できます。

使い方

使い方は jQuery のセレクタさえ知ってればカンタンです。
フォーム内の各要素名とリアルタイムの値を反映する各要素が関連付けされるので、そのようにマークアップすれすぐ使えます。
たとえば、上記サンプルは配布元のサンプルを少しアレンジしたものですが、以下のようになってます。

MagicPreview マークアップ

  1. ▼フォームの内容が反映されるブロック▼
  2. <div class="preview clear">
  3. <div id="img_select"><img src="images/1.jpg" alt="hello" /></div>
  4. <p>Photo <span id="p_select">1</span> chosen</p>
  5. <h2 id="p_title">Photo title</h2>
  6. <p id="p_desc">Photo description</p>
  7. <p><strong>Creative Commons:</strong> <span id="p_cc">No</span></p>
  8. <p><strong>Score:</strong> <span id="p_rating">No rating</span></p>
  9. </div>
  10.  
  11. ▼入力フォーム▼
  12. <form action="#" method="post" class="mp_form photopreview">
  13. <fieldset>
  14.     <ul>
  15. <li><label>Select a photo: </label><select name="select"><option value="1">Photo 1</option><option value="2">Photo 2</option><option value="3">Photo 3</option></select></li>
  16. <li><label>Photo title: </label><input type="text" name="title" value="" size="30" /></li>
  17. <li><textarea name="desc" rows="8" cols="40">Photo description</textarea></li>
  18. <li><label><input type="checkbox" name="cc" value="Yes" /> Creative Commons?</label></li>
  19. <li class="ratings"><label>Rating out of 5:</label><input type="radio" name="rating" value="1" checked /> 1<input type="radio" name="rating" value="2" /> 2<input type="radio" name="rating" value="3" /> 3<input type="radio" name="rating" value="4" /> 4<input type="radio" name="rating" value="5" /> 5</li>
  20.     </ul>
  21. </fieldset>
  22. </form>

各色の要素が関連付けされます。
基本的にフォームを基準にして各要素名にプレフィックスを付けた ID を、リアルタイム表示側の要素に命名するってかんじでしょうか。
たとえば、「Select a photo」の select タグには「select」という名称にしてます。
それに関連付けされる表示側の ID にはプレフィックス「p_」を付加した「p_select」とするわけですね ( ̄∇ ̄)b

上記サンプルの実際のコードは以下のようになります。

MagicPreview コード

  1. <script type="text/javascript">
  2. $(function () {
  3. $('form.photopreview :text').magicpreview('p_');
  4. $('form.photopreview :checkbox').magicpreview('p_');
  5. $('form.photopreview textarea').magicpreview('p_');
  6. $('form.photopreview :radio').magicpreview('p_', {
  7. 'formatValue': function (value) {
  8. return value + '/5';
  9. }
  10. });
  11. $('form.photopreview select').magicpreview('p_');
  12. $('form.photopreview select').magicpreview('img_', {
  13. 'child': 'img',
  14. 'change': 'src',
  15. 'onBefore': function() {
  16. $('#img_select img').fadeOut("fast");
  17. return true;
  18. },
  19. 'onAfter': function() {
  20. $('#img_select img').fadeIn("fast");
  21. return true;
  22. },
  23. 'formatValue': function (value) {
  24. return './images/' + value + '.jpg';
  25. }
  26. });
  27. });
  28. </script>

各色分けしたコードは MagicPreview でリアルタイム表示するためのコードで、先ほどマークアップした時の色に該当します。

MagicPreview の基本的な使いかは以下の通りです。

  1. $(form_fields).magicpreview(prefix, options);

form_fields は jQuery のセレクタですね。
prefix には先ほどチョビッと触れたように、フォームの各要素名に付加するプレフィックス名( p_ )を指定します。そして option には以下のオプションが選択可能です。

  • child

    form_fields セレクタの子要素に対して何かしたい場合に指定します。 たとえばサンプルでいうと青字のコードで使ってまして、p_select の子要素にあたる img タグを指定しています。

  • change

    chiled オプションで指定した要素に対して変更したいアトリビュートを指定します。 たとえばサンプルでいうと、img タグの src アトリビュートを変更したいので src と指定しています。

  • onLoad

    ページがロードされたときに実行させたい場合に指定するハンドラです。 上記サンプルでは使ってません。

  • onBefore

    MagicPreview 実行前に何かやらせたい場合に指定するハンドラです。 たとえばサンプルでいうと、イメージを変更する前にフェードアウトさせてます。
    戻り値は必ず true を返してください。

  • onAfter

    MagicPreview 実行後に何かやらせたい場合にしているするハンドラです。 たとえばサンプルでいうと、イメージを変更した後にフェードインさせてます。
    ここも必ず戻り値は true を返します。

  • formatValue

    child、change オプションで指定した値を加工したい場合に指定するハンドラです。 たとえばサンプルでいうと、選択された番号のイメージファイルの URL を作成したり、選択されたラジオボタンの番号のテキストを加工したりしてます。
    戻り値には change オプションで設定する内容を返します。

以上です。
直感的で分かりやすいと思うので使ってみてください。

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

 

コメント用フィード