2016-06-13 7 views
-1

私はドロップダウンを使用しています.Change()を使用して関数をトリガします。関数は基本的にgetJSONを使用して特定のデータを取得し、その値に基づいてmp3ファイルの配列の文字列を作成する必要があります。forループの先頭に文字列変数がありません

以下のコードでは文字列を生成していますが、文字列には常にundefinedという接頭辞が付きます。

setTimeoutは、データが受信されるまで一定の遅延を提供することに気づくでしょう。以下の例では、静的な値を使用していますが、接頭辞はまだundefinedです。なぜ私が間違った方法で変数を定義した可能性がありますか分からない。

完全な例JSBin

$('.customSurah').change(function(){ 
    //surahNo = $('#surah option:selected').val(); 

    setTimeout(function(){ 
    //countSpan = $('#surah-wrapper').children().length; 
    surahNo = 1; 
    countSpan = 7; 
    var i=0; 
     for (i = 0; i <= countSpan; i++) { 
      strCat += surahNo+"/"+i+".mp3,"; 
      console.log(strCat); 
     } 
    }, 3000); 

}); 

OUTPUT

undefined114/0.mp3, 
undefined114/0.mp3,114/1.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3,114/5.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3,114/5.mp3,114/6.mp3, 
+0

ここで 'strCat'は定義されていますか?空の文字列として初期値で宣言し、それはうまく動作するはずです –

+0

これは完全な例ですここでループのために定義されていますhttp://jsbin.com/nicutokago/edit?html,output – Learning

答えて

3

あなたが初期化されていない変数strCatを持って、そしてあなたは、この行でそれに値を追加します。

strCat += surahNo+"/"+i+".mp3,"; 

strCatがループの最初のラウンドで初期化されていない場合は、undefinedが文字列の先頭に追加されます。

は、この問題を解決するには、最初に空の値に変数を初期化する必要があります。

var strCat = ''; // <- initialize your variable to empty value 
surahNo = 1; 
countSpan = 7; 
+1

いくつかは、私たちにdownvoteいかなる理由も言及していない。 downvoteのユーザーはdownvoteを正当化することができます – Learning

+0

あなたはそれを正しく持っています、私はJavaScriptの人は非常にまれにそ​​れを使用していません..基本的な間違いをしました。 – Learning

+1

私はあなたがこのコメントで彼がループの外側でstrCatを定義したと言っていると思います。 – brk

3

結果はJavascriptが懸念されるごとに完全に有効です。

なぜですか?

javascriptで変数を宣言してデフォルト値を割り当てないと、おそらく自動的にundefinedが割り当てられていると思います。したがって、それは有効です。あなたのケースでは

var somevar; // non assigned default value set to -> undefined 
 
console.log(somevar); // logs undefined

しかし、
は、あなたがそれを空の文字列var strCat "";のようなデフォルト値を与える必要があります:あなたはそれを行うとどうなります。だから、今あなたがこれを行うとき:

var somevar = ""; // assigned default value to set to -> "" 
 
console.log(somevar); // logs ""


だから、あなたの問題への解決策である、あなたは初期化する必要が/あなたの変数にデフォルト値を割り当てます。 like:

var strCat = ""; 
関連する問題