■ フォームに入力を促すメッセージを出力する 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アプリに組み込んでもよろしいですか?