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)