evalの挙動について

このQ&Aのポイント
  • aspとJavaScriptを使って、ユーザが数値以外の値を入力した場合、エラーとしてそのコントロールにフォーカスを当てたいと思います。
  • FormのOnSubmitでeval関数を使用して値を評価し、数値以外の場合にエラーを表示する方法を知りたいです。
  • 詳しい方にお教えいただきたいです。
回答を見る
  • ベストアンサー

evalの挙動について

evalで特定のコントロールにフォーカスを当てれないでしょうか? asp と JavaScript を使って、ユーザが数値以外の値を入力した場合、エラーとしてそのコントロールにフォーカスを当てたいと思います。 Form の OnSubmit で以下の関数を呼び出します。 function CheckForm(){ nRoomCnt = <%=nRCnt%>; var ArrayRoomId = new Array(); <% for nCnt = 0 to nRoomCnt - 1 %> ArrayRoomId.push( <%=arrRoomId(nCnt)%> ); <% next %> for(var nCnt = 0; nCnt < nRoomCnt; nCnt++){ var s = "sCheck = document.form06.SelRoom" + ArrayRoomId[nCnt] + ".value;" ret = eval(s); //こちらは正しく評価されます。 alert(ret); if(isNaN(ret)){ s = "document.form06.SelRoom" + ArrayRoomId[nCnt] + ".SetFocus(); return false;"; ret = eval(s); // ここでエラーが発生し、次の画面に遷移してしまいます。 alert(s); alert(ret); return false; } } alert(ret); return true; どなたか詳しい方、ご教示いただけないでしょうか? よろしくお願いします。

  • ab-bz
  • お礼率88% (8/9)

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

記述が間接的なのとスクリプトのみなので、よく理解できていてませんが、 多分、SetFocusが最初のエラーになっていて、次に、return falseが単独評価されるので、function内にないというエラーになると推測します。  eval("return false"); ではエラーになります。  eval("(function(){return false;})();"); なら一応動きますが… そもそもとして、なぜevalを介さなければならないのか理由がわからないのですが、単純にスクリプトで document.forms["form06"].elements["SelRoom"+ArrayRoomId[nCnt]].focus(); とかではダメなのでしょうか? また、全体が不明なのでよくわかりませんが、順に数値のチェックを行なうだけなら、わざわざ配列で名前を定義しなくてもいけそうな気がします。 (function内でArrayRoomIdを定義しているので、他では使っていないと推測しましたが…) 例えば、全ての要素の処理が同じならチェックをループするだけでよいですし、入力の種類が混在するのなら、classにnumberと設定されている要素だけ数値入力のチェックをするとかの考え方でもよさそうです。 もっと別の考えをするなら、入力中に(blurなどで)リアルタイムにチェックをするといった方法もありそうな気がします。

ab-bz
質問者

お礼

document.forms["form06"].elements["SelRoom"+ArrayRoomId[nCnt]].focus(); で思い通りのことができました。 ありがとうございます。

その他の回答 (1)

回答No.1

ちょこっとだけ見ると、クライアントサイドで実行される部分を示していますよね? それって、クライアント側のブラウザに依存します。 分かっています? て、事は、ブラウザとかの情報が必要ですね・・・・ 何も記載されていようなようですが・・・・ ヘッダー部分とか、ブラウザ名とかバージョンとか、だいたいJavaScript のバージョンは幾つでコーディングしたのでしょうか? そこに依存します。

関連するQ&A

  • フォームの入力チェックをすると既に入力した項目が消える

    実は過去のQ&Aの中でご紹介されていた ホームページを拝見させて頂いたのですが、 残念ながら私の応用力が足りず、 上手く作ることが出来ません。 下記のように書いてみたのですが、 これでは未入力のメッセージにOKを押すと その前に入力したものが全て消えてしまいます。 何方か、正しい書き方をご教示下さいますよう 宜しくお願い申し上げます。 <script language="JavaScript"> <!-- function checkForm(){ if(document.form1.chk1.checked == false && document.form1.chk2.checked == false) { alert('チェックなし'); return false; } { flag = 0; for ( i = 0 ; i < document.form1.radiobtn.length ; i++){ if (document.form1.radiobtn[i].checked){ flag = 1; } } if (!flag){ alert('ラジオなし'); return false; } if(document.form1.sel.selectedIndex == 0){ alert('メニューなし'); document.form1.sel.focus(); return false; } if(document.form1.bun.value == ""){ alert('文字なし'); document.form1.bun.focus(); return false; } } return true; } //--> </script>

  • プルダウンメニューを選択していない時に送信ボタンを押した場合、(必須の)アラートを表示したい。

    過去にほぼ同じ質問がありましたが、それでも解決出来なかったので質問させていただきました。 フォームで未入力の項目に対してアラートとフォーカスされるようにしました。 そこにプルダウンメニューを加えたものを作ろうとしたのですが、アラートの内容が全部同じ(職業が選択されていません)になってしまった事と、アラートは表示されたのですが、プルダウンメニューを選択してもアラートが出続けてしまいます。 プルダウンメニューが未選択の場合にのみアラートを表示するにはどうしたらよいでしょうか。 <SCRIPT language="JavaScript"> <!-- function chkHissu(frm){ var hissu=Array('name','kana','age','mail','sex','syumi'); var hissu_nm = Array('名前','フリガナ','年齢','メールアドレス','性別','趣味'); var len=hissu.length; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; if(obj.type=='text' || obj.type=='textarea'){ if(obj.value==''){ alert(hissu_nm[i]+'は必須入力項目です'); frm.elements[hissu[i]].focus(); return false; } }else{ for(var j=0, chk=0; j<obj.length; j++){ if(obj[j].checked) chk++; } if(chk==0){ alert(hissu_nm[i]+'は必須入力項目です'); return false; } } } return true; } function check(value){ //数字かどうかのチェック if(isNaN(value)){ alert("数値を半角で入力してください。"); //警告コメント document.form1.age.focus(); return false; } //入力があるかどうかのチェック if(!value){ alert("年齢を入力してください。"); //警告コメント document.form1.age.focus(); return false; } } function checkAd(address){ if(!address){ alert("メールアドレスを入力してください。"); } else if(address.indexOf("@",0)<=0){ alert("メールアドレスが正しくありません。"); document.form1.mail.select(); return false; } } //-- </SCRIPT> ご存知の方がいらっしゃいましたらご教授願います。

  • validateForm firefoxでalertが表示されません

    java scriptについて質問です。 ホームページ内のプルダウンメニューで、項目が選択されていない状態で「submit」ボタンが押された場合、「~を選択してください」というメッセージを表示させたいと思います。 そこで以下のようなfunction validateFormを書いたのですが、alertがIEでは表示されるのにfirefoxでは表示されません。 function validateForm() { if (document.form1.Prop1.options.value == 'Error') { alert('Please select aaa.') document.form1.Prop1.focus() return false } if (document.form1.Prop2.options.value == 'Error') { alert('Please select bbb.') document.form1.Prop2.focus() return false } if (document.form1.Prop3.options.value == 'Error') { alert('Please select ccc.') document.form1.Prop3.focus() return false } if (document.form1.Prop4.options.value == 'Error') { alert('Please select ddd.') document.form1.Prop4.focus() return false } if (document.form1.Prop5.options.value == 'Error') { alert('Please select eee.') document.form1.Prop5.focus() return false } } firefoxでもalertを表示させるには、どのようにすればいいでしょうか? 教えてくださいませ。よろしくお願いします。

  • チェックボックスの選択チェック

    ラジオボタンの選択チェック、セレクトボタンの選択チェックのあとにチェックボックスの選択チェックをしたいのですが、どのように入れればよいのでしょうか。教えてください。 ↓参考までに↓ function check() { var flag=0; if( document.form1.seibetu.length){ flag=1; var i; for(i=0; i<document.form1.seibetu.length; i++) if(document.form1.seibetu[i].checked)flag=false; } if(flag){ alert('性別が選択されていません'); return false; } if(document.form1.nenrei.value=="")flag=true; if(flag){ alert('年齢が選択されていません'); return false; } if( document.form1.Q1.length){ flag=1; var i; for(var i=0; i<document.form1.Q1.length; i++) if(document.form1.Q1[i].checked)flag=false; if(flag){ alert('Q1が選択されていません'); return false; } else {★★★ここに入れたい★★★   ;} } }

  • evalで数値に変換してる筈なのですが・・・NaN

    今、JavaScriptを勉強中なのですが… Nanと言う表示が出てしまうと言う事は数値じゃないと言う事ですよね? どうしても一人の力では脱出できませんのでお助けください! どなたか是非ご教授よろしくお願いします。 var item=["N-01ネックレス","N-02ネックレス","EA-01イヤリング","KS-01携帯ストラップ"]; var g=[10,15,20,30]; var p=[1000,800,600,600]; function n01(){ var gtotal=0; var guram=0; for(a=0;a<4;a++) { if(document.form.elements[a].checked){ document.form.elements[11+(a*3)].value=item[a]; guram=eval(document.form.elements[12+(a*3)].value=g[a]); price=eval(document.form.elements[13+(a*3)].value=p[a]); }else{ document.form.elements[11+(a*3)].value=""; guram=eval(document.form.elements[12+(a*3)].value=0); price=eval(document.form.elements[13+(a*3)].value=0); } gtotal=gtotal+guram[a]; } document.form.elements[23].value=gtotal; }

  • checkFormの記述について

    いつもお世話になっています。 JavaScript初心者なのですが、教えて下さい。 下記フォーム入力する際、 /[][&;`'\\\"|*?~<>^(){}$]/ の記号を入力すると、alertが出るように設定したいです。 どこが違うのかわかりません。 function checkForm(){ if(document.entry.aaa.value == ("/[][&;`'\\\"|*?~<>^(){}$]/"){ alert('記号の入力はできません'); document.carrerentry.name01.focus(); return false; } } よろしくお願いします。

  • 半角英数字のみの入力にエラーを返すには

    運営しているサイトに設置したコメントフォームからスパムがたくさん送信されてきます。 その対策として、「氏名のよみがな」入力欄が半角英数字のみの入力の場合にはアラートを出して投稿できないようにしたいです。 下記のようなJSを使用していますが、 if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } の部分を変更して「半角英数字しか入力されていない場合、アラートを返す」ようにするには、どうしたら良いでしょうか? htmlの文字コードはShift_JISです。 よろしくお願いします。 function postComment { var name = eval('document.name.value'); var kana = eval('document.kana.value'); var email = eval('document.email.value'); var comment = eval('document.comment.value'); sum++; if (!name) { alert('氏名を入力してください。'); return false; } else { if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } else { if (!email) { alert('メールアドレスを入力してください。'); return false; } else { if (!comment) { alert('コメントを入力してください。'); return false; } else { var confirm_text = '以下の内容で送信します\n' + 氏名:' + name + '\n よみがな:' + kana + '\n メール:' + email + '\n 本文:' + comment; if (!confirm(confirm_text)) { return false; } else { alert('コメントを送信しました。'); } } } } } }

  • ASPの中のJavaScriptについて

    会社のASPプログラムの中で利用しているJavaScriptなんですが、 分からない部分があるので教えていただけないしょうか? var cForm = document.ImportItem;とあるのですが、ImportItemというのは、なんなんでしょうか? オブジェクト+ImportItemということはメソッドということになるのでしょうか? それともどこかで宣言させている何かでしょうか? これだけでは分からないと思いますが宜しくお願いします。 ItemCSVも同じようにメソッドなんでしょうか? function CheckForm(flg) { if (flg == 1 || flg == 2) { var cForm = document.ImportItem; if (cForm.ItemCSV.value != "") { var str = cForm.ItemCSV.value; var len = str.length; str = str.toLowerCase(); var pos1 = str.lastIndexOf(".csv"); if ((pos1 + 4 != len)) { alert("ファイルは[csv]を選択して下さい"); cForm.ItemCSV.focus(); return false; } }else{ alert("ファイルは[csv]を選択して下さい"); cForm.ItemCSV.focus(); return false; } } with (document.ImportItem) { action = "SubmitImportItem.asp?Flag=" + flg; submit(); } }

  • VBAのJScriptのeval()の挙動について

    VBAのコードを調べていますが、 JScriptで記述されている部分があり、 この部分でよく分からない挙動があるので教えてください。 (JSONデータをパースしているコードです) 具体的には、(実際のコードを簡略化したもの) ---------------------------------------- Sub test() Dim x As String Dim sc As Variant Dim y As String x = "{""A"":""d"",""B"":""e"",""C"":""f""}" Set sc = json_perse(x) y = sc.CodeObject.getValue("B") Debug.Print y End Sub Public Function json_perse(ByVal x As String) As Variant Dim sc As Object Set sc = CreateObject("ScriptControl") With sc .Language = "JScript" .AddCode "function getValue(){ var $tmp=''; for(var $i = 0; $i < arguments.length; $i++){ $tmp += ""['"" + arguments[$i] + ""']""; } return eval('e' + $tmp); }" .AddCode "var e = eval(" & x & ");" End With Set json_perse = sc End Function ------------------------------------------ のコードを実行すると、 getValue()の引数で指定した文字列(ここではB) の後の:の後の文字(ここではe)が返されますが、 なぜ、このようになるのかがよく分かりません。 この処理をしている部分を抽出すると ------------------------------------- function getValue(){  var $tmp='';  for(var $i = 0; $i < arguments.length; $i++){  $tmp += ""['"" + arguments[$i] + ""']"";  }  return eval('e' + $tmp); } var e = eval(" & x & "); ------------------------------------- となっていて、 eval()は、文字列として指定されたコードをJavaScriptのコードとして評価する ということですが、 eval(" & x & ")とeval('e' + $tmp)の部分が何をしているのかがよく分かりません。 なぜ、このコードを実行すると、 $tmpの文字(この場合はB)の後の:の後にある値が取得できるのでしょうか。

  • ラジオボタンとセレクトボックスの選択チェック

    ラジオボタン、セレクトボタンの選択チェックをしたいのですが 同時にチェックする場合どうすればよいのでしょうか。 失敗策ですが、参考までに↓ function check() { var flag=0; if( document.form1.seibetu.length){ flag=1; var i; for(i=0; i<document.form1.seibetu.length; i++){ if(document.form1.seibetu[i].checked){ flag=0; break; } } } else{ if(!document.form1.seibetu.checked){ flag=1; } } if(flag){ window.alert('性別が選択されていません'); return false; } else{ return true; } if(document.form1.nenrei.options[document.form1.nenrei.selectedIndex]. value==""){ flag=1; } if(flag){ window.alert('年齢が選択されていません'); return false; } else{return true; } }

専門家に質問してみよう