VBscriptの初歩的な例題が分からない

このQ&Aのポイント
  • VBscriptを勉強していて、VBscriptではじめるWEBプログラミングという本を読んでいるが、リスト2-17の例題が理解できない。
  • 例題の中のFor文と条件文についての意味が分からず、特にFor文の初期値や条件文での変数の操作が分からない。
  • For文は0からmyForm.petの長さ-1まで動作することを意味し、条件文では選択されたpetの値をmyPetに追加する操作が行われている。
回答を見る
  • ベストアンサー

VBscriptの初歩的な例題が分かりません。

VBscriptを勉強していて、 VBscriptではじめるWEBプログラミングという本を読んでいるのですが、 いきなり躓いてしまいました。 リスト2-17という例題がのっていたのですが、良く理解できません。 <html> <head> <title>VBScript_Sample17</title> <script type="text/vbscript"> <!-- Option Explicit Sub selectData() dim i dim no dim myPet For i=0 to myForm.pet.length-1 If myForm.pet(i).Checked=True Then myPet=myPet & "[" & myForm.pet(i).Value & "]" no=no+1 End If Next If no>0 Then Msgbox(myPet & "が選択") Else Msgbox("選択なし!") End If End Sub --> </script> </head> <body> <form id="myForm"> <input type="checkBox" name="pet" value="らんちゅう">らんちゅう<br> <input type="checkBox" name="pet" value="桜錦">桜錦<br> <input type="checkBox" name="pet" value="ハムスター">ハムスター </form> <button onClick="selectData()">確認</button> </body> </html> Sub selectData()の中の For Nextステートメントの For i=0 to myForm.pet.length-1 の意味が分かりません。 0から最終値myForm petになるまでlength-1 だから長さを一つずつ短くする? 二つ目の条件文の myPet=myPet & "[" & myForm.pet(i).Value & "]" もよくわかりません。 For i=0 to myForm.pet.length-1 for文は0から 二つ目の条件文の myPet=myPet & "[" & myForm.pet(i).Value & "]" がよくわかりません。 myPetの初期値が書いていないので0から始めればいいのですか? よくわかりません、、、 どなたか教えてくださいよろしくお願いします。

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

  • ベストアンサー
  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.1

myForm.pet.length-1 とは文字数を意味します。 繰り返しの変数 i を 0から始めていますので(ゼロ オリジンと云う) 文字数から 1 引いた値が繰り返しの上限値になります。 "らんちゅう" のチェックBoxにチェックが付いていれば "らんちゅう" の場合は5文字ですので myForm.pet.length-1 は 5-1=4 になります。 つまり For i=0 to myForm.pet.length-1 とは For i =0 to 4 となり 5回(つまり5文字)繰り返すことになります。 myForm.pet(0).Value は "ら" です。 myForm.pet(1).Value は "ん" です。 以下同様にして myForm.pet(4).Value は "う" です。 この結果として myPet には"らんちゅう"がセットされます。 Msgbox(myPet & "が選択") には 「らんちゅうが選択」と表示されます。

sujitarou39
質問者

お礼

回答ありがとうございました。 参考にさせて頂きます。

関連するQ&A

  • javascriptでチェックボックスの選択状況をチェックする方法につ

    javascriptでチェックボックスの選択状況をチェックする方法について質問です。 チェックボックスを <input type="checkbox" name="chk[]" value="1"> <input type="checkbox" name="chk[]" value="2"> のようにした場合、チェックボックスが1か所以上選択されているかどうかは、 var count = 0; for (var i=0;i<document.myform.elements['chk[]'].length;i++){ if(document.myform.elements['chk[]'][i].checked){ count++; } } if(count==0){ window.alert("チェックしてください!"); } のようにすればチェック可能ですが、inputタグで <input type="checkbox" name="chk1[]" value="1"> <input type="checkbox" name="chk1[]" value="2"> <input type="checkbox" name="chk2[]" value="A"> <input type="checkbox" name="chk2[]" value="B"> のように「name」の配列名が変化する場合はどのようにすればチェック可能でしょうか?

  • チェックボックスの未入力チェック

    ざっとですけれども <form action="**" name="myform" onsubmit="return Check()" method=post> <input type="checkbox" name="Erasedata" id="Erasedata" value="1" > <input type="checkbox" name="Erasedata" id="Erasedata" value="2" > ・・・ <input type="checkbox" name="Erasedata" id="Erasedata" value="5" > <input type="submit" value="選択されたものを削除する"> このようなチェックボックスがあったとして function Check() { for (i=0;i<document.myform.length;i++)  {   if(document.myform.Erasedata[i].checked==true) {return true;}  } alert("どこかにチェックを入れて下さい "); return false; } といった感じで未入力チェックをしています。 チェックボックスが複数の場合はうまく動くのですが、チェックボックスがひとつだとうまくいきません。スクリプトで何か問題があるようでしたらご指摘お願いできませんでしょうか。よろしくお願いいたします。

  • 隠しフィールドをVBScriptでの受取る方法

    初めての投稿です。 ぜひ、おしえてください。 隠しフィールドのデータを次のページ(VBScript)での受取り方法がお聞きします。 default.aspファイルに下記を記述しています: <FORM NAME="MyForm" method=Post Action="./sub.asp"> <INPUT TYPE=Hidden VALUE="<% Response.Write MyData %>" Name="MyData"> <INPUT type="submit" name="cmdSend" value="送る"> </Form> sub.aspファイル(次ページ)に下記を記述しています: <SCRIPT LANGUAGE="VBScript"> Dim temp temp = MyForm.MyData.Value </SCRIPT> 上記の記述文では、データの引渡しができませんが、 (sub.aspページでMyFormがエラーになります) どなたか、正しい書き方を教えてもらえませんか? すみませんが、よろしくお願いいたします。

  • VBscript で複数テキストがあるこういう時どうやればいいの?

    <form name="MyF"> <% For nI = 1 to 10 %> <input type="text" name="test<%= nI %>"> <% Next %> </form> で10個のテキストボックスを作って 仮にあるボタンを押した時に すべてのテキストボックスに "aaaa"と書き込む時 クライアントサイドのVbscript で <script language="vbscript"> Sub Allaaa() Dim i For i = 1 to 10 MyF.test & i.value="aaaa" Next End Sub </script> のようなことをしたいのですが、 テキストボックスをこのように扱うことは 不可能なのでしょうか? 開発環境 Windows2000 IE3.02以上 使用言語 【VBscript】 java ではなくて Vbscript で実現したいのです。 また、今は10個のテキストボックスですが 10は可変です。

  • VBScript+IEのチェックボックス判定

    VBScript(wsh)に関する質問です. InternetExplorerのオブジェクトを作成し,ie.Document.Writeで下記のようにチェックボックスを複数配置しました. <INPUT type="checkbox" id="id0">あああ <INPUT type="checkbox" id="id1">いいい 各チェックボックスがチェックされているか判定したいのですが, for文を用いた場合どのようにすればよいのでしょうか? If ie.Document.all.id0.checked Then … If ie.Document.all.id1.checked Then … のように逐次的に記述しては可変数の場合は対応できません. inputタグのidをすべて"id"として <INPUT type="checkbox" id="id">あああ <INPUT type="checkbox" id="id">いいい For i=0 To n If ie.Document.all.id(i).checked Then … で可能なようですが,ラベルをクリックしたときもチェックされるように <INPUT type="checkbox" id="id0"><label for="id0">あああ</label> とする必要があり,同一のidをinputタグに使用できない状況です. よろしくお願いします.

  • Javascript ポップアップウィンドウでのデータの受け渡し

    よくある○○度チェックみたいなものを作っているのですが、 項目が10個程あって、 「チェックが0個~4個のあなたは、△△△!!」 「チェックが5個~7個のあなたは、◇◇◇!!」 「チェックが8個~10個のあなたは、◎◎◎!!」 という流れなのです。 で、その3パターンの結果ごとに異なる HTMLをポップアップウィンドウで表示させたいのです。 たいていは次のページに結果を表示させるパターンですが、ここをポップアップ表示させたいのです。 しかも3つそれぞれのHTMLに。 <script language="JavaScript"> function myCheck(){ myCnt=0 // チェックした数 for (i=0; i<document.myForm.length-1; i++){ // チェックボックスの数分ループ if (document.myForm.elements[i].checked == true){ // チェックはオンか? myCnt++ // チェック数 加算 } } if ( myCnt <= 3 ){ // チェックは 無し(ゼロ) myUrl = "check_1.html"; } else if ( myCnt <= 5 ){ // チェックは 1以上6以下 myUrl = "check_2.html"; } else if ( myCnt > 5 ){ // チェックは 1以上6以下 myUrl = "check_3.html"; } funMsgUrl(myUrl) } function funMsgUrl(url){ location.href = url } </script>  ・  ・  ・ <form name="myForm"> <input name="checkbox1" type="checkbox">項目<br> <input name="checkbox2" type="checkbox">項目<br> <input name="checkbox3" type="checkbox">項目<br>  ・  ・  ・ <input name="checkbox9" type="checkbox">項目<br> <input name="checkbox10" type="checkbox">項目<br> </form> <input type="button" onClick="myCheck(); return false;" value="チェック"> すみませんが、助言をお願いいたします。

  • 複数あるチェックボックスの入力チェックするには?

    チェックボックスの入力チェックスクリプトを探しており、下記のようなスクリプトをネット検索で見つけました。 <!-- <script type="text/javascript"> function chNull(msg,obj) { if(!obj) return true; if((obj.type || obj[0].type) == 'checkbox'){ var flag = 0; if(obj.length){ for(var i=0; i<obj.length; i++) { if(obj[i].checked) flag = 1; } } else { if(obj.checked) flag = 1; } if(flag == 0) { alert(msg + 'を選択してください。'); return false; } } return true; } --> </script> <form method="POST" action="■.cgi" onSubmit="return chNull('チェックボックス',a);"> <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 </form> 同じnameのチェックボックス群がひとつしかないときはこれで問題ないのですが、 下記のようにnameが複数ある場合にはこのスクリプトのどの部分を変えればよいのでしょうか? <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 <input type="checkbox" name="b" value="B1" />B1 <input type="checkbox" name="b" value="B2" />B2 <input type="checkbox" name="c" value="C1" />C1 <input type="checkbox" name="c" value="C2" />C2 できればこのスクリプトをベースとして使用したいと思っています。どなたかお分かりの方がいらっしゃいましたらお教え下さいませ。 よろしくお願い致します。

  • チェックボックスのチェックについて

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • リセットさせるにはどうしたらいいでしょうか?

    下記のような配列のフォームでボタンを押したらテキストフォールドの値を空にしたいのですがどのように記述したらいいのでしょうか? ご教授宜しくお願いします。 <form name="myform">  <input type="text" name="no[100]" value="abc">  <input type="text" name="no[102]" value="der">  <input type="text" name="no[105]" value="ghi">            .            .           動的に増える </form> ※ document.myform.elements["no[100]"].value = ""; みたいに書けば個別には空にすることは出来たのですが。 elementsの順番で空にすることがどうしてもうまくいきません。 document.myform.elements[0][0].value = "";みたいに。 document.myForm.elements['no[]'].lengthで個数を取得して順番に空にするってことがしたいのですが、<input type="text" name="no[]" value="abc">だったらうまくいくのかもしれないですけど、no[値]があるとどうもうまくいきません。 宜しくお願いします。

  • checkboxの選択数制限と排他処理について

    javascript初心者です。よろしくお願い致します。現在チェックボックスを使用したクイズサイトを作成しており、回答が5つの中から正しいものをチェックし送信するというものです。 その中で、正解数(今回は2つ)以上にチェックをした時に最初にチェックした方のチェックボックスのチェックが外れるという仕組みを組み込む事になりました。 選択数に制限をかけることや排他処理(ラジオボタン)は理解できるのですが、上記の実現方法がどうしても分からず質問させていただきました。 どうかよろしくお願い致します。 <html> <head> <script type="text/javascript"> function check(f,o,m){ var c = i = 0, b = f.elements; for (i; i < b.length; i++) if(b[i].type&&b[i].type=='checkbox'&&b[i].checked&&b[i].parentNode.id==o) c++; for (i = 0; i < b.length; i++) if(b[i].type&&b[i].type=='checkbox'&&!b[i].checked&&b[i].parentNode.id==o) b[i-2].checked=false;// これだと2つ前ではなく2番目のチェックボックスが排他になります。 } </script> </head> <body> <form action="#" id="sampleform" onclick="check(this,'options',2);"> <fieldset id="options"><input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> </fieldset> </form> </body> </html>

専門家に質問してみよう