• ベストアンサー

文字数でフォーカス移動

テキストフィールドが、複数あります ひとつ目のテキストフィールドに半角5文字を入力した瞬間に、 次のテキストフィールドに瞬時に移動させたいと思っています。 ひとつ目のテキストフィールドで、半角5文字入力されたという 情報を拾うことはできますでしょうか? よろしくおねがいいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> たとえば、キーボードから打たれたのではなく、 > 他の入力装置(バーコードリーダーなど)から > テキストフィールドに入力された場合も、 > このJavaScriptでいけるものなのでしょうか? 他の入力装置からテストしたことがないのです。 実際試してみてどうだったでしょうか。 やったことがないので憶測になってしまうのですが、 「onKeyUp」はキーボードのキーアップ時のイベントのみしか 対応できないように思います。 「対応できない場合ものに対しては自動フォーカスアウトという機能を実装しない」 とどこかで線を引いた方がよいかもしれませんね^^; 全てに対応した完璧なものを作ることは困難ですし、とても労力を必要とします。

takokko
質問者

お礼

paplilon68様 大変長々とお付き合いくださいまして、 また、親切な回答に心より感謝しております。 ありがとうございました。 これまでの回答で参考となりました。

その他の回答 (4)

回答No.4

たびたびすみません。 > 少し訂正です。 >> if(! obj.value.match(/^[0-9a-z]+$/i)) { > > if((obj.value != '') && (! obj.value.match(/^[0-9a-z]+$/i))) { if(! obj.value.match(/^[0-9a-z]*$/i)) { これでよかったですね^^; +というのは直前の判断(ここでは[0-9a-z](0~9a-zのどれか))が 一回以上という意味で *は直前の判断が0回以上です。 ですので、テキストが空白だと+の場合は半角英数字が 一回以上ではないので不正の判断となっていました。 *としたのでテキストが空白の場合も「半角英数字が0回以上の繰り返し」 に該当するため正常時の判断となります。 細かな修正になりましたが、 if((obj.value != '') && (! obj.value.match(/^[0-9a-z]+$/i))) { if(! obj.value.match(/^[0-9a-z]*$/i)) { のどちらでもいいです。

takokko
質問者

補足

これまで、いろいろと、細かく教えていただきありがとうございます。 たとえば、キーボードから打たれたのではなく、 他の入力装置(バーコードリーダーなど)から テキストフィールドに入力された場合も、 このJavaScriptでいけるものなのでしょうか? たびたび、申し訳ございません。 もし、わかりますようでしたら、よろしくお願いいたします。

回答No.3

> onMouseUpでできるかと思いましたが、そうすると マウスでフォーカスを持っていったとき5文字入力されていると次のテキストにフォーカスが移ってしまうのでダメです。 <input type="text" name="txt1" maxlength="5" size="6" style="ime-mode: disabled;" onKeyUp="focus_next(this);" onMouseUp="focus_next(this);"> という意味です。 もし、このイベントで処理を行う場合は 関数focus_next()内の処理で判断を追加し、テキストにフォーカスを 持っていったときには次のテキストにフォーカスが移らないようにする 工夫が必要となります。

回答No.2

> このONkeyupは、英数半角5文字をコピペしたとしても、 > 反応するものなのでしょうか? 「Ctrl+V」でのコピペでしたらキーアップのイベントが発生しますが、 マウスの右クリックの「貼り付け(P)」ではイベントは発生しません。 onMouseUpでできるかと思いましたが、そうすると マウスでフォーカスを持っていったとき5文字入力されていると次のテキストにフォーカスが移ってしまうのでダメです。 マウスの右クリックの「貼り付け(P)」はあきらめるか もしくは対応できるようなイベントや処理を考えなければなりません^^; 少し訂正です。 > if(! obj.value.match(/^[0-9a-z]+$/i)) { if((obj.value != '') && (! obj.value.match(/^[0-9a-z]+$/i))) { テキストが空白のときには判断しないようにしました。 その他に特定のキーが押された場合は処理しないようにするためには event.keyCode などでどのキーが押されたかを判断します。

回答No.1

takokkoさんこんにちは、ぱぴよんと申します。 半角5文字というのが具体的にどういったものか分かりません。 半角英数字でしょうか。 それとも記号なども入るのでしょうか。 半角英数字と推測して話を進めます。 自動でフォーカスを移動するということなのでonKeyUp時になるのかな?と思います。 1.KeyUp時に半角英数字のみ入力されているかを判断する。 2.他のものが入力されれば違うものだけ削除するなり、テキストを空にする。   このときフォーカスを入力中のテキストに戻す。 3.半角英数字のみ入力されているときのみ5文字入力されたかどうかの判断を通す。 4.5文字に達していれば次のテキストへフォーカスを移す。 といった処理です。 他にも方法はあると思いますが、上記のサンプルを掲載します。 -------------------------------------------------- <html> <head> </head> <body> <script type="text/javascript"> <!-- var txt_obj = new Object(); txt_obj['txt1'] = 'txt2'; txt_obj['txt2'] = 'txt3'; txt_obj['txt3'] = 'txt1'; function focus_next(obj) { // 1 if(! obj.value.match(/^[0-9a-z]+$/i)) { // 2 alert('半角英数字のみ入力してください。'); obj.value = ''; obj.focus(); return ; } // 3 if(obj.value.length == 5) { // 4 document.forms['frm1'].elements[txt_obj[obj.name]].focus(); } } //--> </script> <form name="frm1"> <input type="text" name="txt1" maxlength="5" size="6" style="ime-mode: disabled;" onKeyUp="focus_next(this);"> <input type="text" name="txt2" maxlength="5" size="6" style="ime-mode: disabled;" onKeyUp="focus_next(this);"> <input type="text" name="txt3" maxlength="5" size="6" style="ime-mode: disabled;" onKeyUp="focus_next(this);"> </form> </body> </html> ---------------------------------------------------

takokko
質問者

補足

ご丁寧な 回答ありがとうございます。 このONkeyupは、英数半角5文字をコピペしたとしても、 反応するものなのでしょうか?

関連するQ&A