intime o'

私はこねることのできる粘土でしかなかったが、鋳型を拒否する粘土だった(サガン著「悲しみよ こんにちわ」より) 最近の更新について - JavaScript 2011/09/01(Thu.)
 最近このブログの仕様を変えての色々なメモ。

document.addEventListener("keydown", func, true)
で"h","j","k","l"のキーダウンを取得したら記事の移動、ページのスクロール
をするようにした。

今まで<body>タグの中にonkeydown="..."って書いてたような気がするから
document.body.addEventListener(/*...*/)
って思ってたんだけど違った。いや、もしかしたらブラウザによって
違うのかもしれない。FirefoxとOperaくらいでしか私は確認していない。

document全体でやっちゃってるから、例えばページの中に
<input type="text">とか<textarea />
があってその中に入力しててhjklを押しちゃうと困る。これは例外であるとして
適当にreturnしなきゃいけない。

やり方は簡単であろう。
event.target
を見ればいい。つまり、「何に対してkeydownしたか」というDOMオブジェクトが
得られるハズ。それがinputかtextareaだったらreturnすればいいだろう。

でもそうはしなかった。
「何に対してkeydown」って何だよ。「何に対してclick」なら分かるよ。
マウスポインタの先にあるオブジェクトだよ。
何に対してkeydownってさぁ。何だかよくわからなくて、気持ちが悪かった。
実際、それってフォーカスが当たってるオブジェクトのことじゃん。
じゃあ、
document.activeElement
がいいな。
個人的にはコッチのほうがすっきりしてていいな。
eventよりdocumentのががっちりしてるイメージだし。
合理的具体的な理由は無いよ。

ちなみに次のような例外処理にした。
if(typeof(document.activeElement.value)=="string")return;
つまり、入力フォームならば、そのDOMオブジェクトはvalueプロパティに
文字列があるはず、とした。

コメ(0) | トラ(0)