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
document.getElementById("do").innerHTML = window[postTo];

您还应该养成避免使用 setTimeout 的字符串参数版本的习惯,因为它可能会导致安全问题:

timingToSend = setTimeout(UidToPost, 1000);

我假设您还想调用 clearTimeout() (或避免首先设置最后一个),例如,在您的变量完成之后。

最后,使用数组可能更容易、更灵活地完成此操作,但以上是您可以使用当前方法的方法。

于 2012-09-20T14:31:28.453 回答
1

您正在尝试动态创建变量的名称以与字符串连接一起使用,这是可能的,但不能使用该语法。由于您的变量是全局变量,它们将存储在window对象中,因此您可以像这样访问它们:

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

考虑到这一点,您只需要更改此行:

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

至:

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

您还需要处理该变量存在的情况(即他们在显示最后一个变量后再次单击按钮),并采取适当的措施(可能循环回到开头)。

是一个工作演示。

于 2012-09-20T14:34:16.760 回答
0

这不起作用的原因是您将字符串SetUid与当前计数连接起来c以创建一个字符串,并将其添加到innerHTMLdiv 中。

相反,您应该将值保存在数组中,并将变量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 个变量后,该函数现在将“未定义”写入屏幕,因为您一直在循​​环。

于 2012-09-20T14:34:35.397 回答