このページの本文へ

  • twitterでつぶやく
  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

Web制作の現場で使えるjQuery UIデザイン入門 ― 第9回

jQueryによるフォームのデザインの基礎(後編)

2009年09月02日 15時30分更新

文● 西畑一馬/to-R


■パスワード入力フォーム部品を選択する:password

 :passwordは、type属性の値が「password」のinput要素(パスワード入力フォーム)だけを選択するフィルターです。

 次のサンプルでは、パスワード入力フォームがフォーカスされると、input要素の後ろに「<p>パスワードは6文字以上で入力してください</p>」という(X)HTMLを追加します。フォーカスが外れると、p要素を取り除きます。

サンプル11(スクリプト部分)


$(function(){
    $(":pass").focus(function(){
        $(this).after("<p>パスワードは6文字以上で入力してください</p>");
    }).blur(function(){
        $("p").remove();
    })
})

サンプル11((X)HTML部分)


パスワード:<input type="password" name="pass" />


サンプル11(実行結果)

サンプル11
サンプル03の実行画面。パスワード入力フォームをフォーカスすると、「パスワードは6文字以上で入力してください」と表示される

■ラジオボタンを選択する:radio

 :radioは、type属性の値が「radio」に設定されているinput要素(ラジオボタン)だけを選択するフィルターです。

 次のサンプルでは、ラジオボタンがクリックされると、ラジオボタンと対になるlabel要素(ラジオボタンのid属性と同じ値をfor属性に持つlabel要素)を太字に変更します。また、label要素がクリックされた場合も、クリックされたlabel要素を太字にします。

 なお、以前にチェックを入れたラジオボタンが太字のままにならないように、クリックイベントの処理の最初に $("label").css("font-weight","") として、すべてのlabel要素のfont-weightプロパティをいったん初期値に戻しています。

サンプル12(スクリプト部分)


$(function(){
    $(":radio").click(function(){
        $("label").css("font-weight","")
        $("label[for='"+$(this).attr("id")+"']").css("font-weight","bold")
    })
    $("label").click(function(){
        $("label").css("font-weight","")
        $(this).css("font-weight","bold")
    })
})

サンプル12((X)HTML部分)


性別:
<input type="radio" name="gender" value="男性" id="gender_man" />
<label for="gender_man">男性</label>
<input type="radio" name="gender" value="女性" id="gender_woman" />
<label for="gender_woman">女性</label>


サンプル12(実行結果)

サンプル12
サンプル12の実行画面。ラジオボタンを選択すると対応するラベルを太字にする

【実務でハマる落とし穴】

「change() じゃダメ?」

 実はサンプル12は、フォームの値の変更を感知するchange()を使って、もっと簡単に書くことができます。

サンプル13(スクリプト部分)


$(function(){
    $(":radio").change(function(){
        $("label").css("font-weight","")
        $("label[for='"+$(this).attr("id")+"']").css("font-weight","bold")
    })
})


 ところがこのプログラム、残念ながらInternet Explorer(IE)では望みの結果が得られません。

 先に説明したとおり、changeイベントは、該当するフォーム部品からフォーカスが外れたタイミングで値が変更されたかどうかを確認します。FirefoxやSafariは、ラジオボタンがクリックされると、クリックされた要素が一瞬フォーカスされた後すぐにフォーカスが外れます。ところが、IEの場合はラジオボタンをクリックしただけではラジオボタンにフォーカスが残り、改めてほかの要素をクリックしなければフォーカスが外れません。そのため、意図したとおりにchangeイベントの処理は動作しない、というわけです。

この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

VOCALOID3 スターターIA ARIA ON THE PLANETES

VOCALOID3 スターターIA ARIA ON THE PLANETES

ヤマハ

17,745円〜

24人が購入

Google上位表示 64の法則 (WEB PROFESSIONAL)

Google上位表示 64の法則 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

72人が購入

標準HTML5タグリファレンス (WEB PROFESSIONAL)

標準HTML5タグリファレンス (WEB PROFESSIONAL)

アスキー・メディアワークス

2,205円〜

59人が購入

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

スペックコンピュータ

4,262円〜

23人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

40人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

9人が購入

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

61人が購入

Amazon.co.jp