1

コードに170、122を表示させたい。すべての値はJavascriptで設定されていますが、それでも出力が得られません。

<!DOCTYPE html>
<html>
   <body>
      <button onclick="UidToPost()">Get It</button>
      <script>
         var SetUid1 = "170";
         var SetUid2 = "122";
         var SetUid3 = "135";
         var SetUid4 = "144";

         var c = 0;
         var timingToSend;
         var SetUid;

         function UidToPost() {
            c = c + 1;
            var postTo = "SetUid" + c + "";
            document.getElementById("do").innerHTML = postTo;
            timingToSend = setTimeout('UidToPost()', 1000);
         };
      </script>
      <p id="do"></p>
   </body>
</html>

前もって感謝します。

これは私が使用しているコードです

 var SetUid = [ "170", "122", "135", "144" ];

 var c = 0;
 var timingToSend;

 function UidToPost() {
    var postTo = SetUid[c++];
    document.getElementById("do").innerHTML = postTo;
    if (c < SetUid.length)          
       timingToSend = setTimeout(UidToPost, 1000);
 };
4

5 に答える 5

3

目立たない変数の代わりに配列を使用します。

     var SetUid = [ "170", "122", "135", "144" ];

     var c = 0;
     var timingToSend;

     function UidToPost() {
        var postTo = SetUid[c++];
        document.getElementById("do").innerHTML = postTo;
        if (c < SetUid.length)          
           timingToSend = setTimeout(UidToPost, 1000);
     };
于 2012-09-20T14:35:15.763 に答える
1

文字列連結で使用する変数の名前を動的に作成しようとしていますが、これは可能ですが、その構文ではできません。変数はグローバル変数であるため、windowオブジェクトに格納されるため、次のようにアクセスできます。

window["SetUid1"]
window["setUid2"]
//etc

それを念頭に置いて、次の行を変更するだけです。

var postTo = "SetUid" + c + "";

に:

var postTo = window["SetUid" + c];

また、その変数が存在しない場合 (つまり、最後の変数が表示された後にもう一度ボタンをクリックした場合) を処理し、適切なアクションを実行する必要があります (おそらく最初に戻る)。

これが動作するデモです。

于 2012-09-20T14:34:16.760 に答える
1
document.getElementById("do").innerHTML = window[postTo];

また、セキュリティ上の問題を引き起こす可能性があるため、setTimeout の文字列引数バージョンを避ける習慣を身に付ける必要があります。

timingToSend = setTimeout(UidToPost, 1000);

たとえば、変数が終了した後などに、 clearTimeout() を呼び出すことも必要になると思います(または、最初に最後のものを設定しないようにします)。

最後に、これは配列を使用してより簡単かつ柔軟に実行できた可能性がありますが、上記は現在のアプローチで実行できる方法です。

于 2012-09-20T14:31:28.453 に答える
0

これが機能しない理由は、文字列SetUidを現在のカウントと連結して文字列を作成し、それをdivcの に追加しているためです。innerHTML

代わりに、値を配列に保持し、変数cをその配列へのインデックスとして使用する必要があります。

     var values = [170,122,135,144]
     var c = -1;
     var timingToSend;
     var SetUid;

     function UidToPost() {
        c = (c + 1) % values.length; 
        var postTo = "SetUid" + c + "";
        document.getElementById("do").innerHTML = values[c];
        timingToSend = setTimeout('UidToPost()', 1000);
     }

実際の例: http://jsfiddle.net/RsKZj/

于 2012-09-20T14:35:47.470 に答える
0

これはトリックを行います:

document.getElementById("do").innerHTML = window[postTo];

変数の数を確認する必要があります。4 番目の var が表示された後、ループし続けるため、関数は「未定義」を画面に書き込みます。

于 2012-09-20T14:34:35.397 に答える