• ベストアンサー

乱数の生成について

下記のスクリプトではボタンをクリックして乱数を生成しています。 ボタンをクリックする事無く、windowが開くと同時に乱数を生成するにはどのようにすれば良いでしょうか? <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- function gen_random(num1, num2) { retval=Math.random(); document.myform.ans.value = (Math.floor(retval * (num2 - num1)) + eval(num1)); } //--> </SCRIPT> </HEAD> <BODY> <center> <form name=myform> 乱数の範囲 <input type=hidden name=d1 value=1000> <input type=hidden name=d2 value=9999> <input type=button name=btn1 value=乱数発生 onClick=gen_random(myform.d1.value,myform.d2.value)><br> 乱 数:<input type=text name=ans size=4> </form> </center> </BODY> </HTML>

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

  • ベストアンサー
  • yy_y
  • ベストアンサー率39% (99/252)
回答No.2

もっとシンプルにすると... <html> <head> <title>テスト</title> </head> <body> 乱数:<input type="text" name="ans" size="4"> <script language="JavaScript"> <!-- var NUM_MIN = 1000; /* 最小値 */ var NUM_MAX = 9999; /* 最大値 */ document.all("ans").value = Math.floor(Math.random() * (NUM_MAX - NUM_MIN + 1) + NUM_MIN); /* または,テキストボックスを使わないなら document.write(Math.floor(Math.random() * (NUM_MAX - NUM_MIN + 1) + NUM_MIN)); でもかまいません(前の行に置き換えてお使いください).不要なら消してかまいません.*/ --> </script> </body> </html> なお,あなたのコードでは,9999は絶対に現れません.(Math.random()では0以上1未満の乱数が求められます.8999倍すると0以上8999未満となり,1000を足して小数点以下を切り捨てると1000以上9999未満の整数,つまり1000以上9998以下の整数になってしまいます.)

champ21
質問者

お礼

LancerVIIさん、yy_yさん、ありがとうございました。 助かりました。

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんばんは。 <body onLoad="gen_random(1000,9999);"> でボタンクリックしなくても呼ばれます。

関連するQ&A

  • 【乱数】任意の範囲、固定個数、重複しない乱数

    テニスのダブルス組み合わせ用のスクリプトを考えております。 ネットでいろいろ探して試してみましたが Javascript初心者で、寄せ集めでは限界がありますので質問させてください(;^_^A 【何をしたいのか】 ・テキストボックスで任意の数字(整数)で範囲と行数を指定。 ・結果は数値4個固定とし、4個で1グループ。この4個内は重複がないように。 ・4個1グループを指定の行数分求める。 ・このとき、なるべくならすでに出た数字は後回しにしたい。例えば1~10の範囲としたら、1~10すべて出るまでは一度出た数字は後回しになるように。 ・小さい範囲で大きな行数を指定すれば、必ず同じ組み合わせが出ることは了承。 ・結果は下記のようにしたい。 1,6,8,3 2,4,5,10 9,7,2,3 ・ ・ 3,6,8,1(1行目と同じ組み合わせだが順不同なので可、またはまったく同じのが出ても可) 【現在の状況】 ネットで拾ったサンプルから、何をどのように書き換えたらいいのかわからずです(;^_^A 【サンプルの提示】 ■範囲の乱数■ <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- function gen_random(num1, num2) { retval=Math.random(); document.write(Math.floor(retval * (num2 - num1)) + eval(num1)); } //--> </SCRIPT> </HEAD> <BODY> <center> <table border=1 cellpadding=4> <form name=myform> <tr><td bgcolor=#ffffe4 align=center> <font color=blue> 乱数の範囲 </td></tr> <tr><td align=center> <input type=text name=d1 size=2 maxlength=2> ~ <input type=text name=d2 size=4 maxlength=4> </td></tr> <tr><td align=center> <input type=button name=btn1 value=乱数発生 onClick=gen_random(myform.d1.value,myform.d2.value)><br> </td></tr> </form> </table> </center> </BODY> </HTML> ---------------------------------------- ■30個を5行ずつ出している <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> var i; for(i=1 ; i <=30 ;i++) { document.write(Math.floor(Math.random()*10) +"<BR>"); if(i%5 == 0) document.write("<HR>"); } </SCRIPT> </HEAD> <BODY> </BODY> </HTML> --------------------------------------------------------- ■重複しない、しかも後回しになる?■ <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> //once_rand: min以上max未満の重複しない乱数を生成するためのオブジェクト function once_rand(min,max){   this.cnt=max-min;   this.arr=[];   //乱数候補を配列に格納   for(var i=0;i<this.cnt;i++){this.arr[i]=min++;} } //乱数を取り出すメソッド once_rand.prototype.next=function(){   if(this.cnt<=0){     //もう乱数候補が残っていない     return undefined;   }   //乱数を取り出す位置を決定   var idx=Math.floor(Math.random()*(this.cnt));   //乱数を取り出す   var rand_val=this.arr[idx];   //重複しないように最後尾の要素で上書き(今のthis.arr[this.cnt-1]は次回以降使われない)   this.arr[idx]=this.arr[this.cnt-1];   //残りの乱数候補が減少   this.cnt--;   return rand_val; } //テスト var rand1 = new once_rand(1,15); //1以上15未満 var str=rand1.next(); while(1){   var rand_val=rand1.next(); //乱数を取り出す   if(rand_val == undefined){break;}   str += ","+rand_val; } alert(str); </SCRIPT> </HEAD>

  • javascript 乱数が取得できない

    はじめまして。 一月ほど前から「パズルネット ソフィア」 http://www.pori2.net/js/number/4.html というサイトでjavascriptの基礎を学んでいるのですが、乱数 を扱う段階になって自分の作成したプログラム(以下) <html> <head> </head> <body onload="Mondai()"> <form name="quiz"> <input type="text" value="" > <input type="button" value="赤" onclick="Push(0)"> <input type="button" value="青" onclick="Push(1)"> <input type="button" value="黄" onclick="Push(2)"> <input type="button" value="緑" onclick="Push(3)"> <input type="button" value="白" onclick="Push(4)"> </form> <script type="text/javascript"> <!-- var col=new Array("red","bleu","yellow","green","white"); var Rnd; function Mondai(){ Rnd=Math.floor(Math.random() * 5 ); document.quiz.element[0].value=col[Rnd]; } function Push(num){ var n=parseInt(num); if( n==Rnd ){ Mondai(); }else{ alert("違います。"); } } // --></script> </body> </html> を実行してもテキストボックス内に何の値も表示されず 、ボタンを押しても「違います。」とだけしか出てきません。 ブラウザはfirefoxを使用しており、javascriptの設定もonに なっています。 カンマや鍵括弧などの記号にも打ち間違いがないかサンプル プログラムを参考にしながら確認してみたのですが、どこにも おかしな点はありませんでした。 サンプルプログラムは下記のとおりで、こちらは正常に実行されます。 <body onload="Mondai()"> <form name="quiz"> <input type="text" value=""> <input type="button" value="赤" onclick="Push(0)"> <input type="button" value="青" onclick="Push(1)"> <input type="button" value="黄" onclick="Push(2)"> <input type="button" value="緑" onclick="Push(3)"> <input type="button" value="白" onclick="Push(4)"> </form> <script type="text/javascript"> <!-- //色名の英単語を配列に入れる var col=new Array("red","blue","yellow","green","white"); //乱数を入れる変数 var Rnd; //テキストボックスに問題文(色名)を表示する関数 function Mondai(){ //0~4までの乱数を発生させる Rnd=Math.floor( Math.random() * 5 ); document.quiz.elements[0].value=col[Rnd]; } //正誤判定関数 function Push(num){ //引数を数字に変換 var n=parseInt(num); //正解なら次の問題を表示、間違っていたらアラートを表示する if ( n == Rnd ){ Mondai(); }else{ alert("違います!"); } } // --> </script> どなたかアドバイスをいただけないでしょうか? よろしくお願いします。

  • 同じnameのhiddenで別々の内容のvalueを送りたい

    同じnameのhiddenで別々の内容のvalueを送りたい <form action="" name="MyForm" method="post"> <input type="hidden" name="rm" value="×××.txt">テスト1 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="○○○.txt">テスト2 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="△△△.txt">テスト3 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> 別のcgiでform送信すると、txtファイルが生成され、上記の繰り返しの部分に追加されていく様なイメージです。 閲覧・削除ボタンを押すと直前のhiddenを送信したいのですが、現状では一番最初のhiddenが送信されてしまいます。 方法がわかる方いらっしゃいましたら、御回答お願い致します。

    • ベストアンサー
    • HTML
  • echo での 変数の扱い方について

    phpでの 下記のスクリプトについて、エラーが出てしまいす。エラー内容は 「syntax error, unexpected '"' 」 というものです。 echo "<input type=\"hidden\" name=\"page_num\" value=\".($page_num-1).\">"; これは、<input type="hidden" name="page_num" value="page_num-1"> を echoで 表記しようとしたものですが、どこが間違っているのか。 おそらく、$page_num-1 の変数の扱いに問題があるようなんですが、 どのように書けばいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ボタンを押して計算結果を出したい

    下記のもの、うまくいきません。 どのようにしたらよいのでしょうか? 教えてください。よろしくお願いします。 <HTML> <HEAD> <TITLE>Calculator</TITLE> <SCRIPT language = "JavaScript"> function calc(Submit){ Num1 = document.foam1.Num1; Num2 = document.foam1.Num2; Ans = document.foam1.Ans; document.foam1.Ans.value = s1 Ans s2; } </SCRIPT> </HEAD> <PRE> 数値1 演算子 数値2 答え</PRE> <FORM METHOD=GET ACTION="/calc/calc.exe"> <INPUT NAME="Num1" VALUE="" onChange="calc()"> <SELECT NAME="Opr" SIZE=1 VALUE="" onChange="calc()"> <OPTION>+<OPTION>-<OPTION>*<OPTION>/</SELECT> <INPUT NAME="Num2" VALUE="" onChange="calc()"> = <INPUT NAME="Ans" VALUE="" onChange="calc()"> <INPUT TYPE="Submit" VALUE="計算"> </FORM> <H2></H2> </HTML>

  • ラジオボタンでうまくするには・・・・

    初めまして。 現在下記のプルダウン形式で、一つの価格が同じなので問題なく動くのですが <FORM action="cart/sys/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> <SELECT name=sur> <OPTION value="" selected>購入数量</OPTION> <OPTION value=1>1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</SELECT> <INPUT type=submit value=カートに入れる> </FORM><BR> <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> </FORM> 同じ商品で1・2・3・4・5のそれぞれに単価が変わる設定をしたいのですが、うまくいく方法が見つからないです。 ラジオボタン形式で作ってみたものの・・・・ <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=submit value=カートに入れる> </FORM> <FORM> <INPUT type="radio" name="name1" value="2000">1袋<BR> <INPUT type="radio" name="name1" value="3900">2袋<BR> <INPUT type="radio" name="name1" value="5800">3袋<BR> <INPUT type="radio" name="name1" value="7500">4袋<BR> <INPUT type="radio" name="name1" value="8500">5袋</FORM> としてみましたがうまくいきません。 なにか方法ございましたら、ご教授いただければと思います。

    • ベストアンサー
    • HTML
  • hiddenフォームのvalueを自動生成したいのですが...

    JavaScriptで生成した値を、同じページの中にあるinput type=hiddenフォームのvalueの値として使用したいのですが、うまく行きません。 普通のinputタグであれば、 <SCRIPT Language="JavaScript"> <!-- function SetOrderId() { myDate = new Date(); Year = new String(myDate.getFullYear()); Month = new String(myDate.getMonth()+1); Day = new String(myDate.getDate()); if ( Day.length == 1 ) Day = "0" + Day; document.forms[0].OrderId.value = Year + "-" + Month + "-" + Day } //--> </SCRIPT> <BODY onLoad="SetOrderId()"> <INPUT NAME="OrderId" TYPE="TEXT" onClick="SetOrderId()"> で、ページを開いたときにOrderIdフォームに値が代入されているのですが、 <input type=hidden name="OrderId"> としたときには、上記のスクリプトで生成した値がinput type=hiddenのvalueに設定されず、困っています。 どうすればinput type=hiddenのvalueの値にJavaScriptで生成した値を代入できるのでしょうか?

  • javascriptで取得した値を、FORMで送信する

    いつもお世話になっております。 jspからwindow.openを使い、別ウインドウを表示しました。 別ウインドウでの質問です。 javascriptで前のページ(jsp)の情報を受け取り、それを次のページ(jsp)へFORM(POST)で送りたいのですが、うまくいきません。 ご教授下さい。 <HTML> <HEAD> <script type="text/javascript"> <!-- function sent() { var num = window.opener.document.aaa.number01.value; ここで前ウィンドウの情報を取得しています return num; } function sub() { document.bbb.submit(); } // --> </script> </HEAD> <BODY onload="sub()"> <form name="bbb" METHOD="POST" action="http://okwave.jp"> <input type="hidden" name="timeid" value=""> <input type="hidden" name="number00" value="1"> <input type="hidden" name="number01" value="sent()"> <!--<input type="hidden" name="number01" value="204038054776">--> 当たり前ですが、コメントにしている部分にすると次のページでうまくいきます。 </form> </BODY> </HTML>

  • javascriptで配列の重複判定の方法について

    似たような質問はありましたが、明確な答えが定まらないため質問させていただきます。 何卒、ご教授宜しくお願いします。 ■やりたいこと questions配列からanswerに乱数を入れて、それをvalueに入れたいのですが、 乱数を使うと、どうしても重複が発生してしまうため、重複を回避したいのですが、 どのように記述したらよいのでしょうか? 以下、ソースです。 <h2>問題:<span id="question_num"></h2> <input type="button" value="" id="answer_0" onclick="seikai(0)" /> <input type="button" value="" id="answer_1" onclick="seikai(1)" /> <input type="button" value="" id="answer_2" onclick="seikai(2)" /> <input type="button" value="" id="answer_3" onclick="seikai(3)" /> <script> var questions = [ { 'question': 'アメリカの首都は?', 'answer': ['ワシントン', 'ローマ', 'オタワ', '東京'], 'kotae': 'ワシントン' }, { 'question': 'イギリスの首都は?', 'answer': ['北京', 'ジュネーヴ', 'ロンドン', '東京'], 'kotae': 'ロンドン' }] var rnd; //seikai()で使う var answerNum = 4; function makequestion() { var currentNum = Math.floor(Math.random() * questions.length); document.getElementById('question_num').innerHTML = questions[currentNum]['question']; //ここから重複処理をどのようにして書けばよいかわかりません。 //例えば["東京", "ローマ", "東京", "オタワ"]などが返ってきてしまいます。 for ( var i=0; i<4; i++) { var ansrnd = Math.floor(Math.random() * answerNum); //選択肢用の乱数 var ans = questions[currentNum]['answer'][ansrnd]; //配列に入れる document.getElementById('answer_' + i).value = ans; } rnd = currentNum; } </script> 恐れ入りますが、宜しくお願い申し上げます。

  • javascriptの計算フォームでカンマ区切り

    下記のようなjavascriptの計算フォームで計算結果に3ケタのカンマ区切りと小数点第2位までで切り捨てるようにしたいのですがどのようにすればよろしいでしょうか? 「javascript カンマ区切り」で検索したサイトをいろいろ見てみたのですが全然わかりません。 どなたかご教授お願い致します。 <head> <script language="JavaScript" type="text/JavaScript"> <!-- function Multiplication(form){ var test = form.ans.value = eval(form.num1.value)*eval(form.num2.value); return false; } --> </script> </head> <p>A×B×C=合計</p> <div> <form name="multiplication"> <input type="text" size="6" name="num1"> × <input type="text" size="6" name="num2" onBlur="Multiplication(this.form)"> = <input type="text" size="15" name="ans" class="txtbox">円(税別価格) <input type="reset" value="やり直し"> </form> </div> </body> </html>

専門家に質問してみよう