jQuery:文字入力を受ける

tableやめてjQuery

 前回のSafariの:beforeと属性セレクタの組み合わせのバグは、iPadのSafariだと発生しない…、むむむ。
 Appleさんのバグチェック体制はどーなってんだー。
 とりあえず、アップル - OS X - フィードバックに送っといたぜ。

 で、今回は今流行りというかもう定番化したというか、もはやJavaScriptそのものというか、そんな感じのjQueryをやってみようかと思います。
 簡単にいうと、jQueryとは「ブラウザ毎に異なるJavaScriptの挙動や仕様を、CSS的なオブジェクト指定記述で統一したもの」のようです。
 あと、Ajaxやアニメーション他、いろいろ便利機能付いてます。

 JavaScriptを書く時にはほとんど必ず通る「IEとそれ以外で処理を分ける記述」を、書く必要がなくなるというステキライブラリなのです。  JavaScriptがもともと持っているDOMの指定方法は呆れるほど冗長なので、CSS方式指定は記述コードも減って見やすくなって素晴らしいのです。

で、文字入力です

 jQuery入門については、良い記事がゴロゴロあるので、特に書かない。
 やはりブラウザ上のFlashがスマートフォン関係では動かないという事で、うちのサイトのインタラクティブフィクションとか、JavaScriptでできそうなんで、練習がてら作ってみようかなと。

 ページ全体でキーを受けとるには、$(document).keydown(…てな感じに、documentのkeydownイベントを仕込めばいいっぽい。
 ちなみに、documentじゃなくてwindowに仕込むと、動くブラウザと動かないブラウザがあるみたい。

 で、受け付けたキーを$("#caret").before(…という形で、キャレット位置の前にくっ付けていくという方式で、CUIっぽいインタフェースのできあがり。

 …はたと気づいたわけだけど、スマフォはフツーキーボードないから、キー入力も何もないじゃん。
 ゲゲッ、いきなり頓挫!!!

 しばらく考えたら、スマフォは入力フィールドにフォーカスしてたらバーチャルキーボード出るじゃん、その時はキー入力取れるんじゃないの?
 というわけで、ダミーの入力フィールドを作って、ついでにコンソール部分をタップしたら、入力フィールドにフォーカスするようにした。
 そんでもって、別に入力フィールドに文字を入力したいわけじゃないので、keydownイベントの返り値にfalseを送ってやって、キーイベントをストップしてやった。

 とまぁ、こんな感じの紆余曲折を経てできあがったのが、以下。

command>_

 うーん、入力フィールドが邪魔だけど、CSSのdisplay:noneで消したらフォーカスできねぇ。
 このへんは課題として残しておく。

 今日はここまで。