
以前ここでお聞きした内容をもとに、自分でいろいろ考えているのですが、
どうしてもわからないので、再度おたずねします。
いくつかある音声(sound01.mp3~sound08.mp3)を、ボタンクリックによっ
てランダムに鳴らします。次に別のボタンなりリンクなりの選択肢がいくつか
あって、条件に該当すれば正解、そうでなければ不正解という判定をしたいと
思います。その際、たとえば答えの選択肢が「1」「2」「3」「4」の四つ
あり、sound01とsound02の時は「1」が正解、sound03とsound04の時は「2」
が正解…というように設定します。
ランダム音声を鳴らすボタンを作成するところまではうまくいきました。
しかし、その次の正解・不正解を照合する関数がうまくつくれません。音声を
ランダムに発生する関数randomSOUNDで発生させた乱数rを、別の関数ansCheck01
でチェックし、それが0か1だったら正解のアラート、そうでなければ不正解の
らに単純化して0のときだけ正解にしていますが、これでもうまくいきません。
変数rは別関数には受け渡すことができないのでしょうか。どう訂正すべきかを
ご指摘下さい。
また、0か1を正解にしたいときはどうすればよいのかも併せて教えていただ
けると助かります。
<SCRIPT language="javascript">
var sound = new Array(
"sound01.mp3",
"sound02.mp3",
"sound03.mp3",
"sound04.mp3",
"sound05.mp3",
"sound06.mp3",
"sound07.mp3",
"sound08.mp3"
);
var r = Math.floor(Math.random() * sound.length);
function randomSOUND() {
bgs.src = sound[r];
}
function ansCheck01(){
if(r == 0){
alert('★★正解★★');
else{
alert('------不正解------');}
</SCRIPT>
No.2ベストアンサー
- 回答日時:
>function内の変数を次の変数に引き継ぐことは無理なんでしょうか。
rを定義している関数から
例えば、function ansCheck01()を呼び出すときに
function ansCheck01(r)として置いて
ansCheck01(r)で呼び出せば、その関数の中でrが使用できます。この場合は、値の変更はできません。
例えば、
function A(){
var v=10;
B(v);
alert(v);
}
function B(v){
v=v*v;
}
の場合、関数Bにv=10が渡され100になりますけど、Aに戻った時点では、vは10です。
値を変更したいような場合はオブジェクトにして
function obj(v){
this.v=v;
}
function A(){
var v=new obj(10);
B(v);
alert(v.v);
}
function B(obj){
obj.v=obj.v*obj.v;
}
とかすると渡された関数の側で値を変更することができます。
>function外で変数rを指定すると、ページをリロードするまで変数が変わらないので、困ります。
関数外で定義してある変数は、それぞれの関数で値を変更することができます。つまり、変えられます。質問文のサンプルではそういう使い方になっていますね。
この場合、リロードすると、初期化されます。
なので、乱数で値が変わるということなのですが、
何らかのイベント(例えば、正解・不正解が終わって(終わったときとか)次の問題が始まる前とかの部分で、
r = Math.floor(Math.random() * sound.length);
とかしてやることになろうかと思います。
この回答への補足
r = Math.floor(Math.random() * sound.length);
を関数の中に組み込んで、新たに乱数を発生させる
やり方でうまくいきました。
このたびは本当にありがとうございました。
No.1
- 回答日時:
function ansCheck01(){
if(r == 0 || r == 1){
alert('★★正解★★');
} else {
alert('------不正解------');
}
}
でどうでしょう?
rの値が期待したモノと違うようなら適当なところで
alert(r);
すればいいと思いますが
回答ありがとうございます。
「(r == 0 || r == 1)」については、本と照合した上で納得できました。
しかし、前のfunction内で設定した変数rは、そのfunction内で完結して
いるようです。単純にbodyへdocument.write(r)を実行するボタンを作成
しても、エラーが起きますから。
だからと言って、function外で変数rを指定すると、ページをリロード
するまで変数が変わらないので、困ります。
function内の変数を次の変数に引き継ぐことは無理なんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のxmlを同ページに読み込み...
-
idを使わずにonclickで自身の要...
-
setTimeoutで、止まらない
-
クリックすると上に開くアコー...
-
ActiveXobjectが作成できない
-
jspからjavascriptの変数引継ぎ
-
C#テキストボックスの文字を配...
-
『名前空間』の意味を教えてく...
-
getElementByIdでASP.NETのText...
-
innerHTMLにて設定した情報を再...
-
<a>タグのテキストを取得
-
excle VBA とweb上の検索を利用...
-
メールフォームの日付入力フォ...
-
同じIDで定義した要素の配列を...
-
画像の一部を表示
-
undefinedを表示させない方法は...
-
HTMLにWSHを組み込む
-
GASでundefinedエラーが出ます
-
○歳△ヶ月と×日を計算してくれる...
-
C言語でクロージャを記述する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
クリックすると上に開くアコー...
-
idを使わずにonclickで自身の要...
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
jQueryの :not() .not() が有効...
-
jslintのエラーについて質問
-
無名関数を使うメリットは何で...
-
Matlabで自作関数をオーバーロード
-
getElementByIdを使用したグロ...
-
JAVAスクリプトで指定時間以降...
-
Ajaxでデータベース(PostgreSQL)
-
XMLHttpRequestでキャッシュを...
-
処理前の「お待ちください」
-
jQueryの"return false"の役割...
-
クロージャーの利点が理解できない
-
javascript(jQuery)でセル内...
-
複数のxmlを同ページに読み込み...
-
jQuery|:not(:animated)
おすすめ情報