■ テキストフィールドのフォーカス時に背景色を変更する JavaScript
以下の JavaScript を読み込ませれば、フォームのテキストフィールドにフォーカスした時に、背景に色がつくようになります。今どのフィールドを選択しているのかが視覚的にわかるので便利。
mixi にこの機能がついていたんだけど、onfocus なんてのをいっぱい書いていて非効率的だと思ったので、読み込ませるだけで勝手に全部のフィールドに設定されるようなものを書いてみました。
window.onload = function() {
var colorful = new ColorfulInput;
colorful.set();
}
function ColorfulInput() {
this.skip = [];
this.color = { 'blur': '', 'focus': '#EEEEEE' };
this.set = function() {
for (var i = 0; i < document.forms.length; i++) {
for (var f = 0; f < document.forms[i].length; f++) {
var elm = document.forms[i][f];
if(!this._checkSkip(elm)) continue;
this._setColor(elm, 'focus');
this._setColor(elm, 'blur');
}
}
}
this._checkSkip = function(elm) {
for(var i in this.skip) {
if(elm.type == this.skip[i]) return false;
}
return true;
}
this._setColor = function(elm, type) {
var color = this.color[type];
var event = function() { elm.style.backgroundColor = color; };
if(elm.addEventListener) {
elm.addEventListener(type, event, false);
} else if(elm.attachEvent) {
elm.attachEvent('on'+type, event);
} else {
elm['on'+type] = event;
}
}
}
もっと違う色を使いたかったら、new の後に colorful.color['focus'] = 'hoge' とかすると良いです。colorful.skip = ['submit', 'textarea'] なんて言う風にすると、submit ボタンと textarea には色がつかなくなります。
わけわかんないと思うので、動作サンプル と、そこで使っている colorful.js を見てみて下さい。
onsubmit で disable にするやつ もそうだけど、こうやって作ってると導入も取り外しも簡単だから楽で良いね〜。
* 更新履歴
- 2006-07-19 - MacIE に対応
Posted by Kyosuke Takayama at 2005-08-19 (Fri) 21:11 printable version


1) fumika (2005-11-07 (Mon) 09:26)
素晴らしいスクリプトですね。参考にさせていただきます。
body の onload に別の処理を書いていると、colorful.set()を
呼び出さないといけないというのに気づかずハマりました。