2005-11-16 (Wed)

フォームに入力を促すメッセージを出力する JavaScript

input type="text" なフォームに最初から「ここに入力して下さい」みたいなメッセージを薄い色で表示させておいて入力を促すようなのありますよね。なんか、あれを、現実逃避気味に書いたので。

function inputDefault(elm, msg) {
   this.elm     = elm;
   this.msg     = msg;
   this.color   = '#999999';
   this.bgColor = '#F9FFF9';
}

inputDefault.prototype.set = function() {
   this._cleared    = false;
   this._defColor   = this.elm.style.color;
   this._defBGColor = this.elm.style.backgroundColor;

   this.elm.value        = this.msg;
   this.elm.style.color  = this.color;
   this.elm.style.backgroundColor = this.bgColor;

   var _this = this;
   addEvent( this.elm,      'focus',  function() { _this.clear();  } );
   addEvent( this.elm.form, 'submit', function() { _this.submit(); } );
}

inputDefault.prototype.clear = function() {
   if(this._cleared) return;

   this.elm.style.color            = this._defColor;
   this.elm.style.backgroundColor  = this._defBGColor;
   this.elm.value = '';
   this._cleared  = true;
}

inputDefault.prototype.submit = function() {
   if(this._cleared) return;

   var _this = this;
   this.elm.disabled = true;
   window.setTimeout(function() { _this.elm.disabled = false; }, 1);
}


function addEvent(elm, type, event) {
   if(elm.addEventListener) {
      elm.addEventListener(type, event, false);
   } else if(elm.attachEvent) {
      elm.attachEvent('on'+type, event);
   } else {
      elm['on'+type] = event;
   }
}

えっと。

var input = new inputDefault(form, 'hogehoge');
input.set();

なんてやれば動くはずです。form の部分は document.form.hoge とかなんか適当に。サンプルも用意してみたのでわかんない人はこっち見て。

手軽に出来るので結構便利かもわからない。

ここまで書いて気が付いたのだけど、submit する時に「ここに入力して下さい」って文字列が送信されちゃうじゃん(今更かよ!)。onsubmit の時に clear を実行したりするように変更せねば…。

追記: onsubmit の時に一瞬だけ disabled にしてデータを送らないようにしてみた。

Posted by Kyosuke Takayama at 2005-11-16 (Wed) 19:58 printable version

この記事へのコメント

1) kuippa (2005-11-17 (Thu) 21:58)

はじめまして。動作サンプルみました。使い心地とか、汎用性高そうですね。
このソースを転用して再配布性を持つwebアプリに組み込んでもよろしいですか?

2) takayama (2005-11-18 (Fri) 08:18)

ありがとうございます。
最近はコードとHTMLの分離がマイブームなので、取り外しがなるべく簡単になるように心がけています。

再配付構わないですよ、public domain という事にします。

3) マイメ□ (2005-11-18 (Fri) 15:21)

テキストをドロップできればもっとイイナ。
IE -> msgが消える。ドロップしたウィンドウにフォーカス
Firefox -> msgの後ろにドロップされたテキストが追加。フォーカスはドラッグ元のまま

4) よしみかん (2005-11-19 (Sat) 03:17)

フォームからフォーカスが外れたときにテキストを元に戻すという改造をやらせていただきました。

自分のBlogのトラックバックが壊れているようなので、コメント欄から失礼します。
ttp://walf443.raindrop.jp/blog/archives/2005/11/_javascript.html

5) takayama (2005-11-19 (Sat) 10:25)

私もメッセージを元に戻す処理を入れたいと思ってました、参考にします!
D&D出来たら便利そうですね、でもちょっと難しいかも?

それにしても、こんなに反響があるとは。

コメントはお気軽にどうぞ

Cookie に保存しますか?


・スパム対策のため、http:// を含むコメントの投稿は出来ません。
・スパムチェックのため、投稿がすぐに反映されない場合があります。
・メールアドレス入力欄には何も入力しないでください。

トラックバック

トラックバックURL: http://espion.just-size.jp/mt-tb.cgi/539

鷹の島: JavaScript ミニライブラリ (2006-07-17 (Mon) 18:27) 0%

ちょっと前から「なくても不便じゃないけど、あったらちょっと便利かもね」っていう JavaScript を書いたりして発表していましたが、一覧とか作ってないからどんなのがあるのかわかりにくかったのでまとめてみました。 onsubmit で disable 以外のスクリプトは全てパブリ...



この記事のリンク元

 
Copyright (C) Kyosuke Takayama, All rights reserved.