WEB相談室

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

タイトル:javascript onBlurについて。

0:[投稿] popo [2002/07/22 16:17 ][環境:WIN+IE WIN系+Java]

お疲れ様です。
フォーカス処理についてお知恵を貸していただきたいです。

正常な値が入るまでフォーカスを失わないようにすることって出来ますか?

<ソース>
/*入力判定(日付け入力)日付けデータチェック*/
functioninDate(valueDate){

 if(valueDate.length != 10){
   event.returnValue = false;
 }

 vardateMaster = /^(\d{4})\/(\d{2})\/(\d{2})$/;
 varoutDate = valueDate.match(dateMaster);
 varisDate = false;

 if(outDate! = null){
   isDate = true;
 }
 if(isDate){
   varyear = outDate[1];
   varmonth = outDate[2]-1;
   vardate = outDate[3];
   varcalendar = newDate(year,month,date,0,0,0,0);
   if(calendar.getYear()!=year){
     isDate = false;
   }
   if(calendar.getMonth()!=month){
     isDate = false;
   }
   if(calendar.getDate()!=date){
     isDate = false;
   }
 }
 if(isDate == false){
   alert("データをYYYY/MM/DDで入力してください。");
   return isDate;
 }
 return isDate;
}

上記の様にチェックをしているのですがalertが出たとき、alertBoxにあるOKボタンを押すとフォーカスが失われて、次の処理が実行されてしまうため、その実行をさせたくないのです。
出来れば正しい処理が出来るまでフォーカスを失いたくないのですが、出来るのでしょうか?

本当はonSubmitでしたいのですが、FORMの値をnameでvalueを取れないため、inputタグから直接判定をしたいのですが・・・・


1:[回答] バギンズ [2002/07/23 00:21 ]

>正常な値が入るまでフォーカスを失わないようにすることって出来ますか?

以前、それでバグっているブラウザがあった記憶が...
例え、onBlurイベントとfocus()メソッドの組み合わせでフォーカスを抜けないようにできたとしても、操作上とってもやな感じになるのでやめた方がいいです。

>本当はonSubmitでしたいのですが、FORMの値をnameでvalueを取れないため
何故onSubmitイベントで入力した内容がとれないのでしょう?


2:[回答] popo [2002/07/23 10:10 ]

バギンズさま大変ありがとうございます。

うーん。やっぱり駄目ですか。
先日ずーと考えても、調べても方法論が見当たらなかったので今、onSubmitの方法でやっているのですが、
ややこしい問題にぶち当たって・・・・

そもそも、
1.textフィールドがループによって数十個作られます。
2.ランダムにDATE型、varchar2型、NUMBER型のTextフィールドがあります。(違う言語のループ文でフィールドを作成しています。)
3. DATE型のみ日付けチェックをします。

たとえば、DATE型のフィールドが123個目にあったとしたとき、
javascriptで、
for(k=0; k < Count; k++){
 DateValue = document.Form5.elements["DATE_L_" + [k]].value;
if(DateValue != ""){
 if(inDate(DateValue) != -1){
  document.Form5.elements["TX_L_" + [k]].value = DateValue;
 }else{
  document.Form5.elements["TX_L_" + [k]].value = "0001/01/01";
  }
}

----------------------------------------
#inDate(DateValue)日付けチェック関数に飛ぶ。
#Count フィールド数

としているのですが、関数がありません!!というエラーが出ます。

少しずつ、前進して行ったのですが、ここにきて止まってしまいました。まだまだ未熟です。
で、申し訳ないのですが、ループでまわしてNAMEの値を取得できないのでしょうか?


3:[回答] ぱんだ [2002/07/23 15:25 ]

横レスですみません。

var arrName = new Array();
for(i=0 ; i<document.form.elements.length ; i++){
 arrName[i] = document.form.elements[i].name;
}

でフォーム名は取れませんでしたっけ??


4:[回答] popo [2002/07/23 19:13 ]

ぱんださんありがとうございます。

>横レスですみません。
そんなことありません。とても助かりました。

上記の方法で取得は出来たのですが、不必要な情報まで所得してしまうので、結局断念いたしました。
しかし、ぱんださんのおかげで、処理方法がいろいろわかってきたので、大変助かりました。ここから違う方法を考えます。

仕様が面倒なので、2種類のやり方(onsubmitとその他)で考えているのですが、新たに方法を考えたのです。
onBlurで値をゲットして、もし条件と異なれば、入力した値を削除したいのですが・・・ リアルタイムに出来ません。

<ソース>
function inDate(name,valueDate){
 var dateMaster = /^(\d{4})(\d{2})(\d{2})$/;
 var outDate = valueDate.match(dateMaster)
 var isDate = false;
 if((valueDate.length < 1)&&(valueDate != null)){
   return false;
 }
 if(outDate != null){
   isDate = true;
 }
 if(isDate){
   var year = outDate[1];
   var month = outDate[2] - 1;
   var date = outDate[3];
   var calendar = new Date(year,month,date,0,0,0,0);

   if(calendar.getYear() != year){
     isDate = false;
   }
   if(calendar.getMonth() != month){
     isDate = false;
   }
   if(calendar.getDate() != date){
     isDate = false;
   }
 }
 if(isDate == false){
   document.Form5.elements["name"].value = " ";
   alert("データを日付け型で入力してください。(YYYYMMDD)");
   return isDate;
 }
 return isDate;
}

isDate == falseがfalseだったときに、document.Form5.elements["name"].value = " ";を空白にしているのですが、リアルタイムだと無理なのでしょうか?


5:[完了] popo [2002/07/23 19:23 ]

""コーテーション外したら出来ました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World