ホーム >  JavaScript >  ユーザーフォームにラベルテキストを内包する


Posted:2015/04/10 9:00:10 AM|Category : JavaScript

ユーザーフォームにラベルテキストを内包する

「お名前」「メールアドレス」など、フォーム項目内にラベルを内包します。項目の左に項目名を設置したくないときに効果的です。HTML5には、placeholder属性があり、これを利用することもできます。しかし、今回はjQueryを利用した場合の設置方法を紹介します。

完成イメージ

css0019

フォーカスすると、フォーム内のラベルテキストが消えます。

css0020

フォーカスを外すとデフォルト値に戻ります。

css0019

入力済みの場合はそのまま。

css0021

ポイント

  • ラベルテキストはvalue属性に記述
  • クリック時にはデフォルトのvalueを空にする
  • 記述した内容がデフォルトと違うかチェックする

解説

1.ラベルテキストをフォームのvalue属性に記述

まずマークアップ(html)を記述します。formタグのvalue属性に、「お名前」などのラベルを記述します。すると、テキストボックス内にラベルが表示されます。テキストエリアには、「placeholder」というクラスをつけます。

css0019

.single{
	margin: 0 auto;
	width: 620px;
}

.contact #row h2{ margin-top: 30px; }

/* contact */

.contact dl{
	margin-bottom: 1.5em;
	padding-left: 0;
	width: 70%;
	border: none;
}

.contact dt{
	float: left;
	margin-bottom: .5em;
	width: auto;
}

/****************************************

		Contact Form

*****************************************/

#contact{
	margin: 40px 0 80px;
	background: url(images/postmark.png) no-repeat 100% 0;
}

#contact input[type="text"],
#contact textarea{
	display: inline-block;
	margin: 0;
	margin-bottom: 20px;
	padding: 10px;
	max-width: 100%;
	width: 244px;
	outline: none;
	border: 1px solid #80555c;
	border-radius: 5px;
	background: #f4f1ec;
	box-shadow: 0 1px #fff;
	color: #555;
	font-size: 14px;
}

#contact input[type="text"]{
	padding-left: 40px;
}

#contact textarea{
	overflow: auto;
	padding-left: 40px;
	width: 600px;
	height: 150px;
}

#contact input[type="text"]:focus,
#contact textarea:focus{
	background: #fff;
}

#contact p{
	position: relative;
}

<div class="single">
  <form method="post" action="#" id="contact">
    <p>
      <input class="placeholder" title="お名前を入力してください" type="text" name="name" id="name" value="お名前">
    </p>
    <p>
      <input class="placeholder" title="メールアドレスを入力してください" type="text" name="mail" id="mail" value="メールアドレス">
    </p>
    <p>
      <textarea class="placeholder" title="お問い合わせ内容を入力してください" name="message" id="message">お問い合わせ内容</textarea>
    </p>
      <p class="center">
      <input type="submit" id="submit" value="送信">
    </p>
  </form>
</div>

2.フォーカス時のvalue値の設定

ユーザーがテキストボックスに入力する際、デフォルトの値を消します。
jQueryを利用し、テキストエリアにフォーカスしたときデフォルトのvalue値を消す仕組みを作ります。

css0019

フォーカスすると、フォーム内のラベルテキストが消えます。

css0020

記述する場所は、headタグ内です。jQueryのライブラリファイル(jquery-1.8.2.min.js)もリンクさせましょう。「focus」メソッドで、フォーカス時にはvalueの値を空にします。jQueryは、inputタグのvalue値を取得できます。「value(“”)」をセットすることで空の値を指定します。

※「focus」メソッド
テキストボックス・テキストエリアがフォーカスされたかどうかを感知するメソッド。

※「each」メソッド
セレクタで指定した要素全てに対して、それぞれ処理を実行するメソッドです。今回は、クラスで要素を指定しています。eachメソッドを使うことによりお名前・メールアドレスなど複数の要素に適用できます。

<head>
  <script src="/js/jquery-1.8.2.min.js"></script>
  <script>
  $(function(){
    $(".placeholder").each(function(){
      $(this).focus(function(){
        $(this).val("");
      });
    });
  });
  </script>
</head>

3.デフォルトのバリューのときだけテキストを消す

「2.」の状態のままではユーザーが入力した値が消えてしまいます。
テフォルトバリュー(例:お名前、メールアドレス)のときのみ消すようにします。

<head>
  <script src="/js/jquery-1.8.2.min.js"></script>
  <script>
  $(function(){
    $(".placeholder").each(function(){

      var labelText = $(this).val();

      $(this).focus(function(){
        $(this).val("");
      });
    });
  });
  </script>
</head>

4.フォーカスが外れたときの処理

「3.」のままではvalueが消されたままになってしまいます。
ユーザーが入力しないうちにフォーカスが外れた場合、もとのデフォルトバリューをセットします。blurメソッドを使用し、メソッドチェーンで繋いでフォーカスが外れたときの処理を記述します。

<head>
  <script src="/js/jquery-1.8.2.min.js"></script>
  <script>
  $(function(){
    $(".placeholder").each(function(){

      var labelText = $(this).val();

      $(this).focus(function(){
        $(this).val("");
      }).blur(function(){
        if($(this).val() ===""){ /* 何も入力されていない場合 */
          $(this).val(labelText); /* デフォルトのvalueの値を入れる */
        }
      });
    });
  });
  </script>
</head>

Modernizrを使う

html5のplaceholder属性が使えないとき、Modernizrが役に立ちます。
html5に未対応のブラウザは、jQueryでplaceholderを実装します。html5対応ブラウザではplaceholder属性を利用します。その場合、「Modernizr」などのライブラリを利用すればplaceholderに対応しているブラウザかどうか判定できます。

※IE9はHTML5対応ですが、placeholder属性は利用できません。

Normailze.css

Modernizr

<head>
  <script src="/js/jquery-1.8.2.min.js"></script>
  <script>
  $(function(){
    if(!Modernizr.input.placeholder){
        $(".placeholder").each(function(){

        var labelText = $(this).val();

        $(this).focus(function(){
          $(this).val("");
        }).blur(function(){
          if($(this).val() ===""){ /* 何も入力されていない場合 */
            $(this).val(labelText); /* デフォルトのvalueの値を入れる */
          }
        });
      });
    }
  });
  </script>
</head>

トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 2008年04月 金融機関系I

最近の投稿
人気記事
カテゴリー
広告