2009-02-09 14:20
ソースコードへのリンク先がおかしったので,本エントリに掲載しました.
ソースコードへのリンク先がおかしったので,本エントリに掲載しました.
はじめに
お仕事始めようとしたらふと気になってしょうがなくなってきたので,書いてみました.
夕方にミーティングがあるのに何やってるんだろ...
概要
テキストボックスをフォーカスしたときに語のリストが表示され,そのうちのいずれかをクリックすると,クリックした語がテキストボックスに入力される,というだけのものです.
まぁそれだけではありきたりなので,対象のテキストボックスと表示する語のリストとの対応を簡単な記述で指定できるようにしてみました.
その記述について
inputassister.js (キタナイソース後に掲載) をロード後,次のように記述します.
InputAssister.map = [ { id: 'input1', list: [ 1, 2, 3, 4, 5 ] }, { id: 'input2', list: [ 'a', 'b', 'c', 'd', 'e' ] }, { id: 'input4', list: [ 'ほげ', 'ふが', 'ぴよ', 'foo', 'bar', 'baz' ] } ]; InputAssister.lister_id = 'lister';
InputAssister.map で,対象となるテキストボックスの id と表示させたい語のリストを指定します.複数の指定も可能です.上の例は,id="input1" なテキストボックスをフォーカスしたときに,「1 2 3 4 5」 という語のリストが表示される (そして,いずれかをクリックすると,その値がテキストボックスに入力される),というような設定となっています.
InputAssister.lister_id には,語のリストの表示先のボックスの id を指定します.上の例では,<div id="lister"></div> のようなブロックの中に,語のリストが表示されるような設定となっています.
ちなみに
表示される語は,それぞれ ref クラスな a タグ,<a class="ref">...</a>,で囲ってあります.(文章の意味的に li タグの方がいいのかな...?)
あと,要 prototype.js です.
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | /* * * inputassister.js * * required: prototype.js * */ var InputAssister = { init: function() { if( !this.map || !$( this.lister_id ) ) { alert( 'false' ); return false; } this.lister = $( this.lister_id ); this.listerDefaultHTML = this.lister.innerHTML; for( var i = 0; i < this.map.length; i++ ) { new Assigner( $( this.map[i].id ), this.map[i].list ); } } }; var Assigner = Class.create(); Assigner.prototype = { initialize: function( elm, list ) { Event.observe( elm, 'focus', function( e ) { InputAssister.lister.innerHTML = ''; for( var i = 0; i < list.length; i++ ) { new TagA( list[i], elm ); } }.bindAsEventListener( this ), false ); //Event.observe( elm, 'blur', function( e ) { // InputAssister.lister.innerHTML = InputAssister.listerDefaultHTML; //}.bindAsEventListener( this ), false ); } }; var TagA = Class.create(); TagA.prototype = { initialize: function( val, elm ) { this.formElement = elm; this.elem = document.createElement( 'a' ); this.elem.className = 'ref'; this.elem.innerHTML = val; Event.observe( this.elem, 'click', function( e ) { this.formElement.value = val; this.formElement.focus(); }.bindAsEventListener( this ), false ); InputAssister.lister.appendChild( this.elem ); } }; |
今後
対象のテキストボックスの値を置き換えるかアペンドするかを指定できるようにしてみます.
最近の閲覧数
- [emacs] インデントをハイライトしてくれる「Highlighting indentation」で脱・インデント迷子
- IRC初心者がIRCを通知ツールとして使ってみる,または個人的IRC環境のメモ
- UbuntuとCentOSとにおけるlogrotateの挙動の違いでハマった
- aquaさんで開通間近の新東名高速道路を走ってきた
- Textile記法で手軽にWikiっぽく記録を残しておくツール「SiTeWiki」を作ってみた
- 「GTDme」というオレオレGTDツールを作って使い始めようとしています
- [git][perl] rebase祭りを支援するツール「git-rebase-matsuri」というのを書いてみた
- [perl] Cache::FileCacheが保存するファイルの中身を覗いてみるメモ
- Kansai.pm #14 へおジャマさせていただいてきた
- HTTPSとバックエンドなPlackアプリケーションとPlack::Middleware::ReverseProxyとHTTPヘッダ「X-Forwarded-HTTPS」と
最近のエントリ
- [perl] Image::Sizeで画像サイズを取得できないことがある件とその(アドホックな)対処方法
- 5月連休とaquaさん
- [perl][php] Textile記法+GeSHiでシンタックスハイライトするためのText::Textile::Pluggableプラグインを書いてみた
- [perl] Markdown記法をプラグインっぽく拡張できる「Text::Markdown::Pluggable」というモジュールを書いてみた
- [perl] Textile記法をプラグインっぽく拡張できる「Text::Textile::Pluggable」というモジュールを書いてみた
- aquaさんで入鹿池を2周してきた(約2年ぶり2回目)
- aquaさんで山崎川とか天白川とかの桜を眺めてきた(おまけで豊橋少々)
- サイクルショップカワタさんなツーリング@奈良
- 「魔法少女まどか☆マギカ展 名古屋会場」の写真いくつか
- Kyoto.pm #1に参加 & LTに飛び入らせていただいてきた
カテゴリー
タグ
-
actionscript
amon2
announce
bicycle
bookmarklet
cafe
cooking
cpan
della.js
dqwindowmanager
eating
elisp
emacs
event
gps
gtd
html
http
image
iphone
javascript
lifelog
linux
mac
mono
music
mylifehacks
mysql
mywebservice
neko
nicograph
onomichi
pc
perl
photo
plack
study
svn
tool
travel
twitomonitor
twitter
wcan
windows
wordpress
最近のコメント
-
No Responses.
最近のトラックバック
-
No Responses.
