2014年10月1日水曜日

javascriptの勉強1つ目

HTMLのフォームで記入欄を作って、そこの欄に「ぁ」を記入したら「あ」に変換する
プログラムを作る。

<form name="moji">
<input name="moji_26"  type="text"  style="width:16px;height:14px;" maxlength="1" onkeyup="Up(this.form.moji_26.value,5);"/>
</form>
(Up()関数が「ぁ」を記入したら「あ」に変換するプログラムである。)

という感じにonkeyupというイベントハンドラを使って書いた。
(onkeyupはキーを押して手を放したら関数を動かしてくれる。)

これで完成だと思った。

ところがである。全角ひらがなの状態でxaと記入欄に打って、
その時にEnter keyをポンと押すと、「ぁ」のままである。
(ただしEnter keyを長押しすると「あ」に変換される。)

原因は、

「ぁ」をEnter keyで確定するのは、Enter keyを押した少し後で、
それが、Enter keyから手を離した時より後であったら、

Enter keyから手を離してUp()関数が動く
            ↓
「ぁ」をEnter keyで確定

だと思う。

そこでキーボードから手を離して2秒後にUp()関数を動かすプログラムを考えよう。

と、本来のUp()関数をpostUp()関数と名前を変えて、

function Up(mojimojidesuyo,number22){
if(mojimojidesuyo =="ぁ"){
setTimeout(function(){postUp(mojimojidesuyo,number22);},2000);
 }
}

setTimeout(function(){postUp(mojimojidesuyo,number22);},2000)
は、2000ミリ秒(2秒)後にpostUp関数を実行しますよという意味。

最初は、
setTimeout(postUp(mojimojidesuyo,number22),2000)
と書いてpostup関数を1秒後に実行しようと思ったが、
無理だった。

postUp関数に引数がある場合、
setTimeout(function(){postUp(mojimojidesuyo,number22);},2000)

こんな感じに書かなければ、postup関数を1秒後に実行できないみたいだ。




0 件のコメント:

コメントを投稿