jQueryはJavaScriptのライブラリなんだけど、jQueryを使うと「htmlのタグから特定のclassや属性のタグを選んで操作する」っていう処理が簡単に書けちゃうのでよく使っている。
今回は、「特定の入力欄に来るとIMEを自動的にオンオフする」スクリプトの紹介と、jQueryを使ったJavaScriptの書き方を解説する。
IMEを勝手にオン・オフされるのは実は俺は大っ嫌いなんだけど、お客様から頼まれたら仕方がない。cssで指定すればいいんだけど、今回はデザインと分離したいためjQueryを使って書いてみた。ちなみにIMEのオン・オフはIEでのみ働く。
test.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>日本語入力モード変更テスト</title> <script language="JavaScript" type="text/javascript" src="js/jquery-1.4.1.min.js"></script> <script language="JavaScript" type="text/javascript" src="js/jquery.ime-mode.js"></script> </head> <body> <form> 名前 <input type="text" name="name"><br /> 郵便番号 <input type="text" name="zip"><br /> 住所 <input type="text" name="address"><br /> TEL <input type="text" name="tel"><br /> FAX <input type="text" name="fax"><br /> パスワード <input type="password" name="password" maxlength="40"><br /> 内容<br /><textarea name="area" wrap="soft" cols="50" rows="15"></textarea> <input type="hidden" name="hidden" value="hidden"> </form> </body> </html>
htmlには、jQueryと作ったJavaScriptを読み込むタグ2行を追加するだけ。
jQueryはタグ書き換えをスクリプトで容易にできるのでhtmlを汚さずに済む。
jquery.ime-mode.js
$(function(){
// 日本語入力モードONにするname属性
var activeName = {
name:1,
address:1,
area:1
};
$("input:visible[type!='password'],textarea").each(function(){
if(activeName[$(this).attr("name")] != undefined) {
$(this).css("ime-mode", "active");
} else {
$(this).css("ime-mode", "inactive");
}
});
});
このJavaScriptの4~6行目の部分を修正して、日本語入力モードをオンにしたいタグのname属性を「name属性:1,」のように書けばよい。この場合は名前、住所、内容の入力のときにIMEがオンになり、その他の入力タグではオフになる。
JavaScript解説
1行目 $(function(){ と16行目 }); について。$はjQueryオブジェクトのエイリアスで、jQuery()という関数の引数に無名関数function(){}を渡している。$() または jQuery() は「DOMオブジェクト構築後にdocumentオブジェクトに対して関数を実行する」というもの。言い換えるとhtmlが読み込まれた後ブラウザに表示する前に関数が実行されるので、表示が乱れることがなくタグを書き換えることができる。
実は1行目 $(function(){ と16行目 }); を削除しても動く。9行目の $() と同じなので。じゃあなぜあるかというと、変数やら関数やらを色々書いた後に $(function(){ }); で全体をガバッと囲ってやると、名前空間が閉じ込められて変数名や関数名が外から見えなくなり他のスクリプトと衝突しなくなるから。この記述は省略形で、prototypeと併用すると$が衝突するので、ちゃんとした書き方はまた後で紹介したい。
3~7行目は普通の変数宣言。
9行目 $(“input:visible[type!='password'],textarea”) はセレクターと言って、DOM構築後documentオブジェクトから、inputタグで見えていてpasswordじゃないもの、またはtextareaタグを選択する。
その次の .each(function(){ は、選択されたオブジェクト一つ一つに対して無名関数10~14行目を実行する。
10行目 $(this).attr(“name”) は、現在のオブジェクト this を $ で jQueryオブジェクト型にして、attr(“name”)でそのオブジェクトのname属性を返す。そして連想配列 activeName[] に定義されているかどうか判定している。
11行目 $(this).css(“ime-mode”, “active”); は、現在のオブジェクトのスタイル “ime-mode” に “active”を設定している。これでフォーカスがこのタグに来るとIMEがオンになる。13行目はその逆。
このように、jQueryの基本は、操作対象のタグをセレクターで選択して、選択されたタグに操作をする、という流れになり、このような処理が簡単にできる。
jQueryには他にも非同期通信とかAjaxに便利な機能が色々あるので、また紹介したい。
参考サイト
RSS Feed
Twitter
2010年2月18日(更新2010年3月1日)
MuRa
カテゴリー:
タグ: