• 締切済み

関数から一気に抜ける

お世話になります。 不適切なデータを送らないためのスクリプトを書いています。 <form onsubmit="return func1(this);"> (省略) </form> func1 (frm1){   if (frm1.elements[0]~~~) {     alert(msg0);     return false;   } (省略)   if (frm1.elements[99]~~~) {     alert(msg99);     return false;   }   return true; } このように書く代わりに func1 (frm1){   if (frm1.elements[0]~~~) {     exodus(msg0);   } (省略)   if (frm1.elements[99]~~~) {     exodus(msg99);   }   return true; } function exodus(msg) {   alert(msg);   xxxx false; } とかこんな風に書けたらいいなと思うのですが この「xxxx」に相当するような機能はJavaScriptにあるのでしょうか? よろしくお願いします。

みんなの回答

回答No.3

function func1 (frm1){   if (frm1.elements[0]~~~) {     exodus(msg0);   }   return true; } function exodus(msg){ ; } このときにexodus(msg0)を実行するだけでfunc1も終了する方法はあるか? という意味に取れましたが、どうなんでしょうか。 JavaScriptではそう言う機能(Cのexit()に相当する機能)はありません。 面倒ですが、1つ1つreturn falseで関数を抜けさせる必要があります。   if (frm1.elements[0]~~~) {     exodus(msg0);     return false;   }   (略)   if (frm1.elements[99]~~~) {     exodus(msg99);     return false;   } ですが、他の言語同様にif(1から99){}をまとめて、forループなどでかけますので、(略、ANo.1やANo.2に続きます)

D_mode
質問者

お礼

はい、そういう意味です。 JavaScriptでは不可能なんですね。 かなり探したけれど見つからないわけだ…。 ありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★for 文を使ったら。 ・『msg0』~『msg99』を『msg[100]』の配列に定義変更します。 ・『for』文で 0 ~ 99 までをチェックして行えばいいと思います。 ・以上。おわり。 function func1( frm1 ){  for ( var i=0 ; i < 100 ; i++ ){   if (frm1.elements[i]~~~){     exodus( msg[i] );     return( false );   }  }  return( true ); } function exodus( msg ){  alert( msg ); }

D_mode
質問者

お礼

すみません。 1番の方のところでも書きましたが、 類似した処理をループでコンパクトに書きたいわけではないのです。 つたない説明で申し訳ありませんでした。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

こんばんは。 …なるほど、 --------------------------------- if (frm1.elements[0]~~~) {     alert(msg0);     return false; } --------------------------------- の中の行が、1行でも短くならないか? というご質問ですね。 それなら、 --------------------------------- for(i=0; i<100; i++) { if (frm1.elements[i]~~~) {     alert(msg[i]);     return false; } } --------------------------------- という格好にして、メッセージを msg[n] という配列のかたちで持たせれば、 行は ずっと少なくなります YO !

D_mode
質問者

お礼

すみません。 関数から抜けることを主眼におきたかったので簡略化しましたが、 if (frm1.elements[i]~~~) { の ~~~ も結構パターンがあるのです。 それならそれで真偽値審査部分も配列にすればよいのですけど…。 ともあれ主眼は「1行でも短くならないか?」ということとは 微妙にずれたところにあります。 でもありがとうございました。

関連するQ&A

  • onClickで関数呼出し後に、結果に応じてsubmitを実行する方法

    JavaScriptで、 function func() {  if (a==0) {   alert("処理しない");   return false;  }  return true; } と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。 そして、FORMタグで <FORM NAME="FormName" ACTION="next.html"> <INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();"> </FORM> と記述しています。 要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに 遷移させたいのですが、上記記述では、遷移しません・・・ onClick部分にonClick="return func(),submit();"と記述した場合、 func関数の実行結果がtrueでもfalseでも遷移してしまいます。 そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、 func関数がtrueの時のみうまく遷移するようになりました。 これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか? 正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば 教えていただけないでしょうか? ※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと 考えております。

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

    過去にほぼ同じ質問がありましたが、それでも解決出来なかったので質問させていただきました。 フォームで未入力の項目に対してアラートとフォーカスされるようにしました。 そこにプルダウンメニューを加えたものを作ろうとしたのですが、アラートの内容が全部同じ(職業が選択されていません)になってしまった事と、アラートは表示されたのですが、プルダウンメニューを選択してもアラートが出続けてしまいます。 プルダウンメニューが未選択の場合にのみアラートを表示するにはどうしたらよいでしょうか。 <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> ご存知の方がいらっしゃいましたらご教授願います。

  • 関数への引数について

    ------------------------------------------------------------------ if(Check_Field(location.form.name.value,"名前") == false) return false; if(Check_Field(location.form.sex.value, "性別") == false) return false; if(Check_Field(location.form.address.value,"住所") == false) return false; ------------------------------------------------------------------ function Check_Field(target, msg){ txt = target; txt2 = txt.replace(/ /g, ""); txt2 = txt2.replace(/ /g, ""); if(!txt2){ alert(msg + " が未入力です。"); return false; } } ------------------------------------------------------------------ HTMLの入力項目(name, sex, address)の未入力チェックをしたいと 考えました。 Check_Field関数のパラメータのtargetに入力項目の情報(例:島田、男、東京都) を渡したいのですが、うまくできません。 かといってチェックする項目分関数の処理を大きくしたくありません。 どうぞ宜しくお願い致します。

  • onSubmit=の後ろは複数可能でしょうか?

    <SCRIPT language=JavaScript><!-- function check() { ・ ・ ・ <FORM action="mailto:××@××.com method="post" enctype="text/plain" name="myform" onSubmit="return Check()"> で未記入のものを確認してアラートを出すようにしています。 この機能にフォーム送信後、指定ページへ移動するようにしたいのですが、それは 可能ですか?となると別ページへの移動は function Start(){ setTimeout('window.location.href="他のページのファイル名.htm"',5000); } // --> </SCRIPT> ・ ・ ・ <FORM action="mailto:××@××" method="post" enctype="text/plain" name="myform" onSubmit="Start()"> になると思うのですが、onSubmit=の後に"return Check()"と "Start()"というのは両方使えるものなのでしょうか?;でつないでも正しく動いてくれません。ページ移動が無理なら、"return Check()"を使う、 sent=0 function Check(){ if(sent==0){ sent=1; return true; }else{ if(confirm("1度送信された可能性があります。")){ return true; }else{ return false; } } } かなと思ったのですが、これだと未記入の場合のアラートが出なくなります。 もう行き詰まってしまいました・・。 解決策をご存知の方、ぜひお願いします!

  • Javascriptを勉強中でメールフォームを作っているのですが、

    Javascriptを勉強中でメールフォームを作っているのですが、 function check(){ if(document.form1.namae.value==""){ alert("お名前を入力してください。"); return false; } else{ return true; } } で名前が空白の時送信ボタンを押した時に警告メッセージが出るようにしようと思っています。 ボタンには以下のように書いています。 <form name="form1" action="mailto:mail@address" method="post" enctype="text/plain" onsubmit="check()"> そうすると警告は出ますが、処理を続行してメールも送れてしまいます。 教科書を見ると <form name="form1" action="mailto:mail@address" method="post" enctype="text/plain" onsubmit="return check()"> となっているのでそうすると問題ないのですが、なぜreturnを入れないといけないのかよくわかりません。 check()の中ですでにfalseかtrueの値が出ているのでreturnが要らないと思ったのですが・・ 初心者なのでよくわかっていません。 お願いいたします。

  • アンケート送信のチェックについて

    初心者で本を見ながらアンケートを作っています。 質問事項はラジオボタンで選ぶようになっていて、 送信時にチェックされていない項目があったら「すべての項目をチェックしてください」とメッセージを出したいです。 ある本に「フォームに空欄がないか確認する」ソースがあったのでそれを応用したいのですが上手くできません。 =====ソースは下記です。===== <script language="JavaScript"> <!-- function check(){ for( i=0; i<document.form1.length; i++ ){ if(document.form1.elements[i].type =="radio"){ if(document.form1.elements[i].value ==""){ alert("すべての項目にチェックをしてください"); return false; } } } return true; } //--> </script> ~~~~ ~~~~ <FORM NAME="form1" action="****/*****.pl" method="POST" onSubmit="return check()"> ~~~ ~~~ =====ここまで 本にはtype =="radio"のところが"text"になっていたのですが、エレメントの種類には"radio"もあったので これをいれればチェック出来ると思ったのですが、チェックしないで送信ができてしまいます。 どなたかご教授お願いします。

  • radioボタンでも、うまくアラート処理したいのですが・・・

    <SCRIPT LANGUAGE="JavaScript"> <!-- // ヌル及び空欄のチェックを行う function isFilled(elm) { if (elm.value == "" || elm.value == null) return false; else return true; } function isReady(form) { // 名前の空欄のチェックを行う if (isFilled(form.name) == false) { alert("お名前を入力して下さい。"); form.name.focus(); return false; } return true; } //--> </SCRIPT> フォームによるアンケートページを作成しているのですが、 textボックスで回答が書かれていなく、空欄の部分があったら アラートを出し、そのtextボックス部分に戻す、というような 上記プログラムの流れにしています。 textボックスではうまくいくのですが、radioボタンのとき、 うまくいきません(アラートは出るが、フォームに戻らない)。 回避策を教えてください。

  • javascriptの動作で困ってます。

    動作不良が三箇所あります。 プログラムに詳しい方がいらっしゃいましたら原因を教えて下さい。 ・未入力の質問をアラートで一括表示させたいのですが、 (3)のテキストエリアの箇所が未入力なのにアラートに表示できません。 判定のtrueとfalseを逆にして試すと、(3)のアラートは表示されるものの、記入しても アラートが出続けます。 ・1度しか指定していないにも関わらず同じ内容の警告アラートが2回出てしまう原因が分かりません。 ・入力した項目や選択した項目に関しては未入力項目のアラートとは別のアラートを用意してvalueの値をアラートで一括表示させたいのですが、関数を定義しているにも関わらず、関数が定義されていないとエラーメッセージが帰ってきて、表示されません。 ソースコードは以下になります。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> function check(){ var msg = ""; var msg2 = ""; var str = document.form.id.value; var str2 = document.form.pass.value; if (str.match(/[^0-9]+/)) { alert("客番号は数字のみ"); } if (str.length>5) { alert("客番号は4~5桁"); } if(str.length<4){ alert("客番号は4~5桁"); } if(str==""){ msg += "客番号が未入力です。\n"; }else{ msg2 += document.form.id.value; } if(str2==""){ msg += "パスワードが未入力です。\n"; }else{ msg2 += document.form.pass.value; } if(radioCheck()==false){ msg += "(1)が未入力です。\n"; } if(checkboxCheck()==false){ msg += "(2)が未入力です。\n"; } if(textareaCheck()==false){ msg += "(3)が未入力です。\n"; } if(selectCheck()==false){ msg += "(4)が未入力です。\n"; } if(msg != ""){ //メッセージを出力 alert(msg); } if(radioCheck()==true){ msg2 += document.form.eng.value ; } if(checkboxCheck()==true){ msg2 += document.form.lang.value ; } if(txtareaCheck()==true){ msg2 += document.form.opinion.value ; } if(selectCheck()==true){ msg2 += document.form.age.value ; } if(msg2 != ""){ //メッセージを出力 alert(msg2); } } function radioCheck(){ var count = 0; var eng=document.getElementsByName("eng"); for(var i=0;i<eng.length;i++){ if(eng[i].checked){ count++; } } if(count != 0){ return true; } else{ return false; } } function checkboxCheck(){ var count = 0; var checklist=document.getElementsByName("lang[]"); for(var i= 0;i<checklist.length;i++){ if(checklist[i].checked){ count++; } } if(count != 0){ return true; } else{ return false; } } function textareaCheck(){ var textarea=document.getElementById("demand").value; if(textarea!=""){ return true; } else{ return false; } } function selectCheck(){ var selectValue=document.getElementById("age").value; if(selectValue!="選択されていません"){ return true; } else{ return false; } } </script> </head> <body> <form action="http://www" method="post" name="form"onSubmit="return check()"> <h1>アンケート</h1> <p><label>客番号:<input type="text" name="id"></label></p> <p><label>パスワード:<input type="password" name="pass"></label></p> <h2>(1)</h2> <p>食べたいですか?<br> <br> <input type="radio" name="eng" value="yes"> はい <input type="radio" name="eng" value="neither"> どちらでもない <input type="radio" name="eng" value="no"> いいえ </p> <h2>(2)</h2> <p>食べたい物<br> <br> <input type="checkbox" name="lang[]" value="apple"> りんご <input type="checkbox" name="lang[]" value="banana"> バナナ <input type="checkbox" name="lang[]" value="pasta"> パスタ <input type="checkbox" name="lang[]" value="pizza"> ピザ <input type="checkbox" name="lang[]" value="supu"> スープ </p> <h2>(3)</h2> <p>意見(自由記述)<br> <textarea id="demand" name="opinion" cols="40" rows="4" maxlength="20"> </textarea> </p> <h2>(4)</h2> <p> 年齢を選択 <select id="age" name="age"> <option selected value="選択されていません">以下から選択</option> <option value="10~19才">10~19才</option> <option value="20~29才">20~29才</option> <option value="30~39才">30~39才</option> <option value="40~49才">40~49才</option> <option value="50~59才">50~59才</option> <option value="60~69才">60~69才</option> <option value="70才~">70才~</option> </select> </p> <p> <input type="submit" name="button" value="送信" onclick="check();"> <input type="reset" value="クリア"> </p> </body> </form> </html>

  • プルダウンの必須チェックができない

    今必須チェックのスクリプトを組んでいます。 プルダウン項目の必須チェックを行っているところで、項目を選択しても「必須入力です」というアラートが出てしまいます。 ソースは以下参照です <!-- function hissuCheck(frm) { /* 必須入力のname属性 */ var paramArray = Array(23個あるが字数制限のため省略) /* 必須入力アラート用 */ var alrtArray = Array(23個あるが字数制限のため省略); /* 配列長 */ var len = paramArray.length; for(i=0; i<len; i++) { var obj = frm.elements[paramArray[i]]; if(obj.type == "text") { if(obj.value == "") { alert(alrtArray[i]+"は必須入力です"); frm.elements[paramArray[i]].focus(); return false; } } else if (obj.type == "select") { for(varSelected=0, j=0; j<obj.length; j++) { /*選択されていたらvarSelectedフラグをプラス*/ if(obj[j].selected)varSelected++; } if(varSelected == "") { alert(alrtArray[i]+"は必須入力です"); return false; } } else { for(varChecked=0, k=0; k<obj.length; k++) { .....以下省略 } } } return true; } // --> HTML箇所も書きたかったのですが、ちょっとソースが長くなってご迷惑をおかけしてしまうと思い、割愛させて頂きました。 もし必要であれば一言頂ければと思います。 忙しい中すいませんが、どなたかご教授宜しくお願いします。

  • お問い合わせフォームの送信後クリア

    はじめてお問い合わせフォームを作りました。、 送信後、その入力内容をクリアしたいのですが、 どなたか教えていただけませんでしょうか? 現在、下記のような感じで、チェック後送信としています。 function check(){ var flag = 0; if(!document.form1.mail.value.match(/.+@.+\..+/)){ flag = 1; } if(flag){ window.alert('メールアドレスが正しくありません'); return false; // 送信を中止 } else{ return true; // 送信を実行 } } <FORM name="form1" method="post" action="id?Subject=Page_enquete" onSubmit="return check()">

    • ベストアンサー
    • CSS

専門家に質問してみよう