以前ここでお聞きした内容をもとに、自分でいろいろ考えているのですが、
どうしてもわからないので、再度おたずねします。
いくつかある音声(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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
jQueryの :not() .not() が有効...
-
jQueryでzipを解凍読み込みする...
-
jQueryの導入について
-
Javascriptの変数がうまく渡せ...
-
yuga.js 外部リンクは別ウイン...
-
JavaScript を使ってpkゲームを...
-
同じIDで定義した要素の配列を...
-
イベントが初めの一回しか起き...
-
ASP.NETのコントロールの値をJa...
-
jspからjavascriptの変数引継ぎ
-
C#テキストボックスの文字を配...
-
なぜmatchメソッドがエラーにな...
-
モーダルダイアログウィンドウ...
-
今度は全角が0.5で認識されてし...
-
パス付きサイトのjavascript解析
-
JavaScript window.openで開く...
-
class指定したHTML要素の背景色...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jQueryの :not() .not() が有効...
-
処理前の「お待ちください」
-
jslintのエラーについて質問
-
XMLHttpRequestでキャッシュを...
-
クリックすると上に開くアコー...
-
コードをスマートにさせたい。
-
関数名をテキストから読み込む...
-
jqueryの変数を関数の外に出す方法
-
シューティングゲームの作り方
-
要素名がスペースを含む場合のj...
-
getElementByIdを使用したグロ...
-
XMLHttpRequestオブジェクトが...
-
jQueryが読み込めない
-
Ajaxでデータベース(PostgreSQL)
-
setTimeoutで、止まらない
-
jQueryでzipを解凍読み込みする...
-
CDの曲をケータイのSDに移す
おすすめ情報