Movable Type 備忘録

 

 Form field hints with CSS and JavaScript

こんにちわ^^

学生はいいですね。春休みですもんね。
山手線の中でTDL帰りの小学生や中学生らしき女の子をたくさんみかけました。

羨ましい限りです (; ̄∇ ̄A

さて、今回はフォームにフォーカスが入ると吹き出しを表示するものを見つけたのでTRYしてみました。
以前にも、こちらのコメントフォームに吹き出しメッセージを表示するで似たようなのを紹介してますが、今度のはもっとカンタンに設置できました。

サンプル:メールフォーム

設置方法

まず、こちらのorm field hints with CSS and JavaScriptから圧縮ファイルをダウンロードします。
'final example'というリンクがありますので、そちらをクリックするとダウンロードできます。

圧縮ファイルを適当なフォルダに展開すると、イメージファイルとサンプルページがあります。
サンプルページ中にJavaScriptが記述されています。そのJavaScriptを抜き出したものが以下になります。
デフォルトでは、<input>タグと<select>タグしか吹き出しされないようなので、<textarea>タグでも吹き出しするようカスタマイズしてみました。

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function prepareInputsForHints() {
    var inputs = document.getElementsByTagName("input");
    for (var i=0; i<inputs.length; i++){
        // test to see if the hint span exists first
        if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
            // the span exists!  on focus, show the hint
            inputs[i].onfocus = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
            }
            // when the cursor moves away from the field, hide the hint
            inputs[i].onblur = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
            }
        }
    }

    // repeat the same tests as above for selects
    var selects = document.getElementsByTagName("select");
    for (var k=0; k<selects.length; k++){
        if (selects[k].parentNode.getElementsByTagName("span")[0]) {
            selects[k].onfocus = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
            }
            selects[k].onblur = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
            }
        }
    }
var textareas = document.getElementsByTagName("textarea");
    for (var i=0; i<textareas.length; i++){
        // test to see if the hint span exists first
        if (textareas[i].parentNode.getElementsByTagName("span")[0]) {
            // the span exists!  on focus, show the hint
            textareas[i].onfocus = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
            }
            // when the cursor moves away from the field, hide the hint
            textareas[i].onblur = function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
            }
        }
    }
}

青い字の部分を<textarea>タグ用に追加しました。
上記コードを適当なファイル(たとえば、formhint.jsという名前で保存)に保存します。

そして、各自環境に合わせてアップロードしてください。

次に、やっぱりサンプルページ中にスタイルが記述されています。
そちらも各自の環境に合わせて外部ファイル(たとえば、formhint.cssという名前で保存)に保存します。
以下はわたしのサイトで使っているCSSになります。

/******************************************/
/** ▼吹き出し関連▼                     **/
/******************************************/
dl {
	font:normal 12px/15px Arial;
    position: relative;
    width: 350px;
}
dt {
    clear: both;
    float:left;
    width: 130px;
    padding: 4px 0 2px 0;
    text-align: left;
}
dd {
    float: left;
    width: 200px;
    margin: 0 0 8px 0;
    padding-left: 6px;
}


/* The hint to Hide and Show */
.hint {
   	display: none;
    position: absolute;
/******
right: -250px;
******/
    width: 200px;
    margin-top: -4px;
    border: 1px solid #525b89;
    padding: 10px 6px 10px 12px;
    background-color: #949bbf;
}
/* inputタグ用の吹き出し位置 */
.hint-input {
    right: -60px;
}

/* textareaタグ用の吹き出し位置 */
.hint-textarea {
    right: -150px;
}
/* The pointer image is hadded by using another span */
.hint .hint-pointer {
    position: absolute;
    left: -10px;
    top: 5px;
    width: 10px;
    height: 19px;
    background: url(pointer.gif) left top no-repeat;
}
/******************************************/
/** ▲吹き出し関連▲                     **/
/******************************************/

赤い字の部分をコメントにして、青い字の部分で<input>タグ、<textarea>タグ用の吹き出しの位置を調整します。

最後に吹き出しを入れたいフォームを変更します。
<head>~</head>の間に以下を追加します。

<link rel="stylesheet" href="<$MTBlogURL$>formhint.css" type="text/css" />

<script type="text/javascript" src="<$MTBlogURL$>js/formhint.js"></script>
<script type="text/javascript">
addLoadEvent(prepareInputsForHints);
</script>

そして、吹き出しを表示するフォームにメッセージを追加します。
以下はわたしのサイトで使っているメールフォーム用のフォーム部を抜粋したものです。

<form method="post" id="mailform" name="mailform">
    <input type="hidden" name="mail_post_template" id="mail_post_template" value="Mailform: Complete" />
    <input type="hidden" name="mail_preview_template" id="mail_preview_template" value="Mailform: Preview" />
    <input type="hidden" name="mail_error_template" id="mail_error_template" value="Mailform: Error" />
    <input type="hidden" name="mail_blog_id" value="<$MTBlogID$>" />

    <div id="mailform-open-content">
        <div id="mailform-open-data">
            <p><label for="mail_author">Your Name:* </label><input id="mail_author" type="text" size="30" name="mail_author" />
<span class="hint hint-input">名前を入力してください。もちろんハンドル・ネームでもOKです。<span class="hint-pointer">&nbsp;</span></span>
</p>
            <p><label for="mail_email">Your Mail Address:* </label><input id="mail_email" type="text" size="30" name="mail_email" />
<span class="hint hint-input">メールアドレスを入力してください。<span class="hint-pointer">&nbsp;</span></span>
</p>
            <p><label for="mail_subject">Subject:* </label><input id="mail_subject" type="text" size="30" name="mail_subject" />
<span class="hint hint-input">メールのお題を入力してください。<span class="hint-pointer">&nbsp;</span></span>
</p>
            <p><label for="mail_text">Text:* </label><textarea id="mail_text" rows="10" cols="50" name="mail_text" /></textarea>
<span class="hint hint-textarea">メッセージをどうぞ♪<span class="hint-pointer">&nbsp;</span></span>
</p>
        </div><!-- mailform-open-data -->

        <div id="mailform-open-footer">
            <input type="submit" id="mail_preview" value="Preview" onclick="return ajax_preview();" />
            <input type="submit" id="mail_post" value="Post" onclick="return ajax_post();" />
        </div><!-- mailform-open-footer -->
    </div><!-- mailform-open-content -->
</form>

青い字の部分のように吹き出しメッセージを追加します。
一通り追加したら再構築します。

以上でちょっとした吹き出しメッセージを表示することができました ( ̄∇ ̄)/

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

コメント用フィード