個人的に今後も使うかも,なのでメモ.
ドロップダウンでない (何て言うんだろ?) リストに,とあるファイルのリストを表示し,いずれかの項目をクリックすると,その項目が示すファイルの情報 (ここでは URL と概要) を alert する.
そんな仕様に応える必要に駆られ,次のようなソースを思いつくまま書いてみました.
<script type="text/javascript">
function func( arg ) {
alert( arg.url ); // 選択(クリック)した項目が示すファイルのURL
alert( arg.description ); // 選択(クリック)した項目が示すファイルの概要
}
</script>
<select size="8">
<option onclick="javascript: func( { url: 'ファイル1のURL', description: 'ファイル1の概要' } );">ファイル1</option>
<option onclick="javascript: func( { url: 'ファイル2のURL', description: 'ファイル2の概要' } );">ファイル2</option>
<option onclick="javascript: func( { url: 'ファイル3のURL', description: 'ファイル3の概要' } );">ファイル3</option>
</select>
しかし,これでは IE6 で動作しないことが判明.どうやら option 要素に埋め込んだイベントには反応してくれないようです.(この分野では当然の知識ですかね?)
そこで,select 要素に (onclick) イベントを埋め込むことになったわけですが,上記のものと等価にするにはどうすればいいのやら...
しばらく悩んだ挙げ句,各 option 要素の value 属性に JSON を入れてみよう,ということになり,次のようにしてみました.
<script type="text/javascript">
function func() {
var sel = $( 'sel' ); // prototype.js インポート済みとします
var opt = sel.options[ sel.selectedIndex ]; // 選択項目の要素
var val = eval( opt.value ); // 選択項目の要素の値をオブジェクトに
alert( val.url ); // 選択(クリック)した項目が示すファイルのURL
alert( val.description ); // 選択(クリック)した項目が示すファイルの概要
}
</script>
<select id="sel" size="8" onclick="javascript: func();">
<option value="({ url: 'ファイル1のURL', description: 'ファイル1の概要' })">ファイル1</option>
<option value="({ url: 'ファイル2のURL', description: 'ファイル2の概要' })">ファイル2</option>
<option value="({ url: 'ファイル3のURL', description: 'ファイル3の概要' })">ファイル3</option>
</select>
とりあえずは望んだ動作をしてくれているようです.IE6 でも.
フォーム内の静的な値を持つ要素,選択リストとかラジオボタンとかチェックボックスとか,の値に JSON を与え,javascript と連携することで,情報を扱うプロセスをほんのちょこっとながらシンプルにできるのではないかな,とほんのちょこっとだけ思ってみました.
本日の一語: 駆る
動ラ五[四])
(1)追い立てる。
「馬を―・る」「集まり―・りさわぐ/枕草子 9」
(2)馬・車などを走らせる。
「車を―・ってかけつける」
(3)強いてある行動をとらせる。
「汝を―・りて懺悔の榻に就かしめんは/即興詩人(鴎外)」
か・る 0 1 【駆る/▼駈る】 – goo 辞書
なんだか重圧を感じます...
One Response to “javascript: フォーム内の一要素で複数の値を扱う”
コメントをドウゾ
最近の閲覧数
- [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.

option valueで複数の値を扱っていますが、プルダウンメニューから、曲を撰ぶと音楽が流れ、なをかつブログの背景が変わるようにしたいのですが、option valueでどの様にソースを書けばよいのでしょうか?
ご指導頂けるのであれば、詳しい内容送ります。