🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

4回答

1333閲覧

このコード、どこが間違っていますか?

ray_rio

総合スコア10

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

2クリップ

投稿2019/10/19 09:30

javascript

1function set() 2{d = new Audio("do1.mp3"); 3 r = new Audio("re.mp3"); 4 m = new Audio("mi.mp3"); 5 arr = document.getElementById("input").value; 6 test = setInterval(function() 7 {if(arr[c]=="ド"){d.play();}if(arr[c]=="レ"){r.play();}if(arr[c]=="ミ"){m.play();}; 8 c++; 9 if(c>arr.length){clearInterval(test);}},1000); 10} 11

動かないのですが、どこが間違っているのかわかりません…

ryuii👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/10/19 09:38

動かないときにはエラーメッセージを読んでください。
naomi3

2019/10/19 09:39

HTMLをつけ、何をやりたいのか(目的)を教えてください。
kyoya0819

2019/10/19 09:44 編集

間違えてるから動かないんです。
kei344

2019/10/19 10:56

期待している動作を明示した上で、「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
guest

回答4

0

#「どこ」じゃない。「あちこち」間違ってます

ソースは可読性の高い様式に直して読んでみる

javascript

1function set(){ 2 let c = 0 // カウンタが無い 3 , d = new Audio("do1.mp3") 4 , r = new Audio("re.mp3") 5 , m = new Audio("mi.mp3") 6 //, arr = document.getElementById("input").value // str がふさわしい 7 , str = document.getElementById("input").value 8 , test = setInterval(function(){ 9 //if(arr[c]=="ド"){ d.play(); } 10 if(str.charAt(c)=="ド"){ d.play(); } 11 //if(arr[c]=="レ"){ r.play(); } 12 if(str.charAt(c)=="レ"){ r.play(); } 13 //if(arr[c]=="ミ"){ m.play(); }; 14 if(str.charAt(c)=="ミ"){ m.play(); }; 15 c++; // void 0 = (void 0)++ 16 //if(c>arr.length){ // 範囲は 0 から length-1 17 if(c==str.length){ 18 clearInterval(test); 19 } 20 }, 1000) 21 ; 22}

1)カウンタ利用する変数 c が初期化されていません

void をインクリメントしても void です。
c の追記だけでも、意図した再生に近づけます。

2)文字列処理を理解できていますか?

arr じゃなく、str のほうが可読性が高い。
あと、配列添字形式じゃなく、 charAt()

3)c>length はありえない

length を取りうるものは 0 から始まります。

4)関数トリガとなるDOMが明示されていない。

HTML

1<input id="input" placeholder="ド,レ,ミ を任意の順で3文字入力"> 2<button onclick="set()">再生</button>

5)ほかもJavaScriptの基本を理解しているか疑問を感じる

  • 変数の型
  • document.getElementById()
  • setInterval()
  • DOM の value プロパティの意味
  • etc..

とりあえず、辞書のように使えるこれ 改定第5版 ポケットリファレンス 。必携ですよ。

投稿2019/10/21 07:54

AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

デバッグしてください。
プログラマ, SEは自分で修正できなければ(仕事レベルでは)存在価値がないです。
学者なのに思考停止する人、需要があると思いますか?

デバッグする方法はブラウザによって違いますが、例えばFirefoxなら
Firefox デバッグモードとかがあります。

IEならIE デバッグモードとかでしょうか。

「ブラウザ名 "デバッグモード"」とか「ブラウザ名 "デバッガ"」とかで検索してみてください。

こういうのを使えば、使い方によっては「どこまで読み込まれて、どこでエラーが発生しているのか」とかがわかります。

怪しいのは arr[c] とかの c の部分。
多分、デバッガ使ってやるか、いわゆるprintfデバッグっていう方法 ( JavaScript なら alert関数とか で ) で、例えば alert( c ) とやってみてください。
たぶん、undefined とかになっている可能性が高いです。

もしそれであれば、

arr[c] とかのように使う前に

JavaScript

1var c = 0;

とやってみてください。

JavaScriptでは変数宣言は不要ですが、宣言(および初期化)がないと undefined だったかな。
空の状態になるようです。

次に怪しいのは

JavaScript

1arr = document.getElementById("input").value;

の部分。

inputっていうidはちゃんとありますか?

HTMLが記載されていないので、怪しく感じます。

あるいは、単に set関数が呼ばれていないとか。

ほかの方々が指摘されているように、

  1. 必要な情報( 言語名, ライブラリ名, OSバージョン etc. ) を提示すること
  2. 試したこと(検索も含め)を記述すること
  3. 関係のあるコードを(できる限り)すべて提示すること
  4. 期待している結果と実際の結果を比較できるようにすること
  5. (質問する前に)デバッグしたりして問題解決に臨むこと

これらをすべてやれば、それだけでも「丸投げ」には見えません。

まずは、デバッグをしてください。

投稿2019/10/21 06:01

BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

気がついたところだけなのですが、変数arrは配列にならないことと、cが宣言されてないことです。
複数同じclass名を付けて、
getElementsByClassNameメソッドを使うと、クラス名分の、配列が返ってきます。

投稿2019/10/19 10:07

ryuii

総合スコア438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thyda.eiqau

2019/10/19 10:19

「getElementsByClassNameメソッドを使うと、クラス名分の、配列が返ってきます。」という表現は危険だと思います。伝わりやすさを優先して配列という言葉を使っているのかもしれませんが、返ってくるのは配列風オブジェクトであって配列ではありません
ryuii

2019/10/19 10:21

間違えました。HTMLコレクションですね。
guest

0

文法エラーは無いので、動くはずです。
期待通りの動きをするかどうかはまた別の話ですが。

関数を定義しただけで呼び出していないというオチではないですよね?

投稿2019/10/19 10:01

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問