Posted on 3 月 29th, 2008 by kude
textarea での Enter の処理について昨日長々と書きましたが、もっと簡単にできることに気が付きました。
今までは、キーイベントの取得に onKeyUp を使っていたのですが、これを onKeyDown に変えれば良かったんだ。
どうやら、文字変換の確定 Enter では、onKeyDown イベントは発生しないらしい。
通常の Enter では当然発生するので、つまり、onKeyDown で Enter を検知してやれば、文字変換の確定 Enter に悩まされずに済むということ。
気付いてしまえば、な~んだという話。
加えて、プログラムの処理として
Enter キーが押される → onKeyDown イベント → Enter キーが離される → textarea に文字が追加される → onKeyUp イベント
となるので、onKeyDown で通常の Enter だったら、textarea のフォーカスを奪ってしまえば、改行コードが追加されるのを防ぐことができる。
昨日長々と書いた処理は、onKyeDown を使えば、なんら特別難しくもないコードで出来てしまう。
どおりで、「文字変換の確定 Enter と通常の Enter とを区別する方法」とか調べても、あまり情報がヒットしなかったわけだ。
Filed under: Flash/AIR/Flex | No Comments »
Posted on 3 月 28th, 2008 by kude
textarea で Enter キーが押されたらフォームデータを送信したい、といった処理を JavaScript で行う場合のメモです。
※「textarea で Enter キーが押されたら・・・追記」もどうぞ。
実装のポイントとしては、
文字変換確定の際の Enter キーには反応しないように。
「送信」のつもりで Enter キーが押された場合、改行コードが入力されないように。
の2点。
まず 1. について。
通常の Enter と変換確定の Enter とをどうやって区別するかだけど、これは、Enter によって textarea に入力された文字が改行コードか否かで判断する。
通常の Enter なら、当然改行コードが入力される。
変換確定の Enter なら、確定した文字が入力され、改行コードは入力されない。
2. については、1. の流れで処理できる。
すなわち、Enter キーが押されたらカーソルの直前の文字を調べて、それが改行コードなら除去して「送信」処理を、改行コードでなければそのまま何も行わない。
考え方としては、思ったより簡単だ。
ただ、カーソルの直前の文字を調べるのがけっこう面倒臭い。
まずはカーソルの位置を調べなければならないということで、ネットで調べて、以下のコードを参考にさせて頂きました。
http://www.teria.com/~koseki/memo/xbselection/
カーソルの位置だけ分かればいいので、ちょっと端折ってこんな感じ。
var textareaElement = document.getElementById(”textareaID”)
if (document.selection != null
&& textareaElement.selectionStart == null) {
// IE
var range = document.selection.createRange();
[...]
Filed under: Flash/AIR/Flex | No Comments »