我的For循环错误定时,出了什么问题?

时间:2014-09-16 22:49:15

标签: javascript jquery html for-loop

我的For循环遇到问题,因为由于某种原因没有正确计时。我点击了我的外星人'每5秒钟(您将在代码中看到),并且每次您购买工人时它都会增加。因此,如果你有2个工人,那么每5秒就有2个外星人,3个外星人每5秒就有3个,依此类推。但是,当我有2个或更多工人时,它就像我想为每个工人点击外星人两次。

我想要的: 1工人=每5秒自动点击一次// 2名工人=每5秒自动点击两次 等

它不正当地做了什么: 1名工人按我的意愿行事// 2名工人=每5秒自动点击两次,每次点击值2 等

这是运行for循环的变量:

var workerCheck = setInterval(function(){
        var workers = parseInt($("#Workers").text());
            if( workers > 0 ){
                for(var i = 0; i < workers; i++){
                $("#Alien").click();       
                }
            }
    },5000);

以下是指向我的整个代码的pastebin链接:http://pastebin.com/ApwQgG4w

希望我的问题有道理,如果我有2名工人,例如它会设置“外星人”。每5秒钟值为4,我只想要2,对于3我每5秒需要3个外星人,而不是9等等。

2 个答案:

答案 0 :(得分:3)

您可能需要在重置之前清除时间间隔。

点击&#34;雇用工人&#34;两次,创建了两个计时器。这是demonstration。无论单击按钮多少次,您只需要一个计时器。

当您调用setTimer()时,它会返回一个唯一的整数,您可以使用该整数来稍后引用该计时器。由于您始终设置(覆盖)与计时器的唯一整数相同的变量workerCheck,因此workerCheck变量只能引用最新的计时器。这是demonstration

我建议您每次重置时清除计时器:

$(function () {
    $('#Purchase').click(function () {
        automaticCounter();
    });

    // set variable with broader scope
    var workerCheck;

    function automaticCounter() {
        var workers = parseInt($("#Workers").text());
        workers = isNaN(workers) ? 0 : ++workers;

        $("#Workers").text(workers);

        var autoCounter = parseInt($("#Aliens").text());
        autoCounter = isNaN(autoCounter) ? 0 : autoCounter - 10 * workers;

        $("#Aliens").text(autoCounter);

        // clear the timer
        clearInterval(workerCheck);

        // set the timer
        workerCheck = setInterval(function () {
            var workers = parseInt($("#Workers").text());
            if (workers > 0) {
                for (var i = 0; i < workers; i++) {
                    $("#Alien").click();
                }
            }
        }, 5000);
    }
});

WORKING EXAMPLE

答案 1 :(得分:1)

我希望我理解得对。

这是一个小而酷的小提琴:FIDDLE

您的代码编辑及其现在的工作:FIDDLE

var workers = 0;
var workerCheck = setInterval(function(){
    workers = parseInt($("#workers").val());
        if( workers > 0 ){
            for(var i = 0; i < workers; i++){
            $("#Alien").trigger('click');       
            }
        }
},1000);

你的代码有什么问题:我不知道它有点乱,我编辑它现在正在工作。