WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:object.select();

0:[投稿] Yachimata [2002/12/09 18:56 ][環境:WIN+IE WIN系+Java]

はじめまして。Yachimataといいます。

テキストボックスからタブでの onblur イベントで入力された内容にチェックを掛け、
エラーであったら alert() でメッセージを表示して、テキストボックスにフォーカスを戻すような
JavaScriptを組みました。

ですが、状況によって入力された文字列が反転状態になる場合とならない場合が生じます。
上手く行くことも多々あるので、スクリプトに問題があるようではないのですが、
パターンが読めず、解消することが出来ていません。

もしかしたらIEか、JavaScriptのバグなのかとも思いましたが・・・・・・
何かご存知の方がいらしたらご教授下さい。
よろしくおねがいします。


1:[回答] のぐりん [MAIL] [2002/12/09 21:08 ]

とりあえず、該当するソースを表記しましょう。
判断しようがありません。


2:[回答] Yachimata [MAIL] [2002/12/10 09:15 ]

失礼しました。
記述したソースは以下の通りです。
テキストボックスのロストフォーカスで this で自身を渡しています。

function func(obj) {
 str = obj.value;
 if (str.search(/[^0123456789]/) != -1) {
   alert("再入力して下さい。数値を入力して下さい。");
   obj.select();
   obj.focus();
   return false;
 }


3:[回答] のぐりん [MAIL] [2002/12/10 11:32 ]

  obj.select();
  obj.focus();
の順番を逆にしてみたら、どうなりますか?
または、以下のようにしてみるとか。
  obj.focus();
  obj.onfocus = obj.select();


4:[質問] Yachimata [2002/12/10 19:53 ]

『順番を逆にしてみたら』は特に変化がありませんでした。
『以下のように』では『実装されていません』と、エラーが出てしまいました。

うーん・・・・・
もう少しネットを探ってみます。

引き続き情報をお待ちしております。
(゚゚)(。。)ペコッ


5:[回答] にゃあ! [MAIL] [2002/12/11 17:44 ]

obj.focus();
は、いらないような気が。。。

>状況によって入力された文字列が反転状態になる場合とならない場合が生じます。

再現性はありますか?
ある場合、具体例を挙げえてもらえると、
パターンを誰かが見つけてくれるかもしれません。


6:[質問] Yachimata [MAIL] [2002/12/11 19:44 ]

原因が分かりました。

blur で呼んでいた関数で選択状態にすることで、そのテキストボックスに指定してあった onfocus で呼んでいた関数で文字列操作(replace、slice)を行っていた為に選択状態が解除されてしまっていたようです。
大変お騒がせ致しました。

replace、sliceで何をやっているかと言うと、そのテキストボックスは数値系の入力が行われるテキストボックスで、blur で入力された数字にカンマ編集を、focus でそのカンマを除去する関数を走らせ、ユーザーの入力を補助しています。replace、sliceはそのカンマ除去に用いています。


さて、原因は分かりましたが、その回避方法に今度は悩んでいます。

blur と onfocus がセットで用いられる関数に関して、blur でエラーになったタイミングで何かフラグを立てて、focus の関数ではそのフラグが立っている場合には処理をしない・・・という方法が一番単純そうです。これならば普通にユーザーがクリックしてフォーカスを当てた場合には通常に動作すると思います。

ただこの方法はちょっと力技過ぎるかなという気がします。
もう少しスッキリした方法はないものでしょうか?

つまり、選択状態が解けないまま文字列編集出来る方法はないか、という事なのですが・・・・・・

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World