0

私はこの小さなスクリプトを作成してきましたが、何らかの理由で、変数の1つがその値を増加させません。

コードは次のようになります。

function get_swf(mode){
var swf_path;
swf_update(); //Updating max_num
if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

switch(mode){
case "random":
    current = Math.floor((Math.random() * max_num) + 1);
    swf_path = "uploads/" + current + ".swf";
break;

case "next":
    current += 1;
    if(current > max_num) current = 1;
    swf_path = "uploads/" + current + ".swf";
break;  
case "previous":
    current -= 1;
    if(current == 0) current = max_num;
    swf_path = "uploads/" + current + ".swf";
break;
}
swfobject.embedSWF(swf_path, "lolswf", "800", "400", "9.0.0");
location.hash = current;

}

このコードは関数内にあり、variables:currentおよびmax_numはグローバル変数です。ケース「next」が呼び出された場合を除いて、すべてが期待どおりに機能します。この場合、変数currentは、に達していない場合でも値「1」に設定されますmax_num。たとえば、次のように設定した場合:

max_num = 5current = 2

「次へ」と呼ぶとcurrent1に設定されます。

頭が回らないのですが、手伝ってくれませんか?

どうもありがとうございます!

編集

コードをさらに調べたところ、コードにバグがあるように見える行が見つかりました。この行は、私が提供したコードの上にあります。(コードを関数全体に更新したので、ご覧いただけます)

if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

この行から私が期待したのは、current変数を単に上書きするだけなので、ユーザーは必ずしも最初から始める必要はないということです。しかし、current値を増やす必要があるのに、なぜ値が「1」になるのでしょうか。そして、なぜ他のケースが期待どおりに機能するのでしょうか?

どうもありがとうございました!

4

3 に答える 3

1

変数:

location.hash

整数変数の場合、replaceメソッドをサポートしていません。Replaceメソッドは文字列のプロパティです。

ここで、行を実行すると、次のようになります。

if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

実際には、可変電流を空または0に変換します。

'next'の場合のスイッチセクションでは、2つのステートメントのみがcurrentで動作します。

  1. 電流をインクリメントします。つまり、0 + 1 = 1

  2. 最大値を超えているかどうかをチェックし、1に設定します

どちらの場合でも、現在の値は1になります。

お役に立てば幸いです。

于 2013-01-15T06:53:29.027 に答える
0

場所をif変数とpath変数と交換する必要があります。あなたがしたことは、currentを1に設定し、それをswf_path文字列に追加することでした。

case "next":
    current += 1;
    swf_path = "uploads/" + current + ".swf";
    if(current > max_num) current = 1;
break;

アップデート

以前と同じことをしているようです。そこで同じ修正を使用します

于 2013-01-14T21:53:42.830 に答える
0

整数のみを使用している場合は、モジュラスは常にオプションです

 case "next":
    current = (current+1)%(max_num+1); // the modulus rollover
    if(current == 0) current = 1; // in the case that the remainder is 0
    swf_path = "uploads/" + current + ".swf";
 break;
于 2013-01-14T22:00:37.623 に答える