2005-08-19 (Fri)

テキストフィールドのフォーカス時に背景色を変更する 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()を
呼び出さないといけないというのに気づかずハマりました。

2) takayama (2005-11-07 (Mon) 12:45)

そうなんですよ、本当はクロスブラウザな event 処理のやつを書いてそこで onload をさせるのが良いのですが、ColorfulInput 内の処理と被っちゃうのでやってないのですよね。
良く見ると ColorfulInput 内の処理に MacIE 用の処理が入っていないから、そろそろ書き換えた方がよいのかも 汗

3) garp (2006-07-17 (Mon) 21:38)

おもしろいですね、使わせてもらいます。
ぜひMacIE 用の処理も入れてください( ̄▽ ̄)

4) takayama (2006-07-19 (Wed) 16:56)

対応しましたー

5) ryuichi (2007-06-01 (Fri) 01:02)

とても便利ですね!
使わせていただきました。

6) tag (2008-02-24 (Sun) 08:51)

同じようなこと考えて検索していてたどり着きました。
ずいぶん前に実現されていたんですね。
現在のコーディングの流れで行くと、色を直接指定するより
CSSのクラスか何かを指定できるようになれば…
まあ、もっともIEがCSSのfocusに対応すればいいんですが。

7) mee (2008-09-19 (Fri) 00:44)

かゆい所に手が届く、とても素敵なスクリプトですね。
FireFoxではinput:focusでCSSの設定で簡単に色替えができますが、
IEではfocusの設定が効かないので無理なのかとあきらめかけていましたが、
JavaScriptでの制御とは思いつきませんでした。とてもいい勉強になりました。
ありがとうございました。

8) ut (2009-02-19 (Thu) 16:15)

使わせていただきました!
が、IE7で見た時にセレクト(プルダウン)メニューを押した時に、二度クリックしないと反応が無いのですが‥。解決法がわからず悩んでおります。。
もしわかれば教えていただきたいです。

9) nish (2009-07-23 (Thu) 11:50)

すばらしい!
ありがたく使わせて頂きます。
有難うございました^^

10) taka (2010-01-28 (Thu) 16:04)

とても参考にさせていただきました!
ありがとうございました!!

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

Cookie に保存しますか?


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

トラックバック

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

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

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


レディーファースト: コメントフォームをCSSで弄くる (2007-09-28 (Fri) 15:09) 50%

コメントボックスをCSSでユーザビリティーアップ Blogのコメントボックスは名前、メール、URL、テキストボックスと4つしかないのですが、マウスをテキストボックスにあわせ、クリックすると ボックス内の背景色を変えてユーザビリティーをあげることができますので紹介...


HiGash.Net: 痒いところに手が届くJavaScriptライブラリたち (2008-08-21 (Thu) 01:23) 50%

例えば、画像のロールオーバーをもっと楽にできないかな・・・。テーブルの背景色を1行おきに変えたいけど、1行1行手動でclassを指定するのは面倒だな・・・etc. JavaScriptをゴリゴリ書...



この記事のリンク元

 
Copyright (C) Kyosuke Takayama, All rights reserved.