Javascript / jQuery - 重复检查5次迭代&如果满足条件,则运行另一个函数

时间:2014-05-22 01:37:16

标签: javascript jquery setinterval ready

我遇到运行脚本的实施问题。我想要达到的结果如下。

应该点击网站上的hi_button来运行该脚本,等到btc_digits因点击hi_button而加载完毕(尽管如此,我使用setTimeout来给btc_digits足够的时间来完成加载,我不确定ready()函数是否会更好,或者如何实现它,然后检查另一个输出btc_lose。如果btc_lose不满足5次迭代中任何一次的条件,则脚本将在第一次迭代function one()处开始。如果所有5次迭代都满足条件,则另一个脚本变为活动状态。然后这个过程重新开始。

我尝试了很多变化,但没有一个变化。最新的javascript / jQuery如下。

rollDice = function() { 
  $('#double_your_btc_bet_hi_button').click() 
  setTimeout(one(), 2500) 

  one() 

  function one() { 
    if ($('#double_your_btc_lose').html() !== '') { 
      $('#double_your_btc_bet_hi_button').click() 
      setTimeout(two(), 2500) 
      two() 
    } else { 
      one() 
    } 

    function two() { 
      if ($('#double_your_btc_lose').html() !== '') { 
          $('#double_your_btc_bet_hi_button').click() 
          setTimeout(three(), 2500) 
          three() 
      } else { 
          one() 
      } 

      function three() { 
        if ($('#double_your_btc_lose').html() !== '') { 
            $('#double_your_btc_bet_hi_button').click() 
            setTimeout(four(), 2500) 
            four() 
        } else {  
            one() 
        } 

        function four() { 
          if ($('#double_your_btc_lose').html() !== '') { 
            $('#double_your_btc_bet_hi_button').click() 
            setTimeout(five(), 2500) 
            five() 
          } else { 
            one() 
          } 

          function five() { 
            if ($('#double_your_btc_lose').html() !== '') { 
                alert("function2") 
            } else { 
                one() 
            } 
          } 
        } 
      } 
    } 
  } 
} 

rollDice()

我的原始问题可以在Programmers上找到: https://softwareengineering.stackexchange.com/q/240657/131983

1 个答案:

答案 0 :(得分:1)

现在我给你的代码一些缩进,我们可以看到发生了什么......有点儿。

让我们从javascript中使用分号开始吧。在代码块结束时不需要它,但你绝对应该使用它,这样你就不会混淆自己和他人。当您在代码块中有另一个语句后,在语句结束时肯定需要它。换行不够好。(除非你使用coffeescript,它会为你添加它们)所以让我们添加它们。我不知道你想要做什么,所以自己添加它们。

接下来让我们来看看你的jQuery。我认为你做错了$('#double_your_btc_bet_hi_button').click()。这告诉jQuery运行该按钮的click事件。所以你几乎强迫点击该按钮。我认为你要做的事情就像$('#double_your_btc_bet_hi_button').click(function(){/*do something*/});

执行setTimeout(myFunc(), 2500)不正确。你应该把函数名放在那里。所以setTimeout(myFunc, 2500)。否则javascript将在到达该点时调用该函数,并将其返回值保留在setTimeout中。所以你会做setTimeout("returned value", 2500)之类的事情,这显然不是你想要的。

为什么在其他函数中有这么多函数声明?除非你有理由将这些功能放在一起,否则请将它们分开。如果在您调用的代码块之外声明它们,您仍然可以调用它们。做这样的事情:

function one(){
  /*do something*/
  two();
}
function two(){
  /*la dee da*/
}

如果您在修复语法错误后仍然遇到问题并使事情看起来更好一些,请评论答案,我会看看。祝你好运。

在使用rollDice = function(){...}而不是function rollDice(){...}之前,请先阅读this question

<强>更新

虽然这对我来说仍然没有很多,但也许这更像是你想要完成的事情。

function rollDice() {
  $('#double_your_btc_bet_hi_button').click(function(){
    setTimeout(one, 2500);
  }
}

function one() { 
  if ($('#double_your_btc_lose').html() !== '') { 
    $('#double_your_btc_bet_hi_button').click(function(){
      setTimeout(two, 2500);
    });
  } else { 
    one()
  } 
}

function two() { 
  if ($('#double_your_btc_lose').html() !== '') { 
    $('#double_your_btc_bet_hi_button').click(function(){
      setTimeout(three, 2500);
    }
  } else { 
    one();
  } 
}

function three() { 
  if ($('#double_your_btc_lose').html() !== '') { 
    $('#double_your_btc_bet_hi_button').click(function(){
      setTimeout(four, 2500);
    });
  } else { 
    one();
  } 
}

function four() { 
  if ($('#double_your_btc_lose').html() !== '') { 
    $('#double_your_btc_bet_hi_button').click(function(){
      setTimeout(five, 2500);
    }
  } else { 
    one();
  } 
} 

function five() {
  if ($('#double_your_btc_lose').html() !== '') {
    alert("function2");
  } else {
    one();
  }
}

rollDice();