Javascript/jQuery—重复检查5次迭代&;如果满足条件,则运行另一个函数
我在运行脚本时遇到了一个实现问题。我正在努力实现的结果如下Javascript/jQuery—重复检查5次迭代&;如果满足条件,则运行另一个函数,javascript,jquery,setinterval,ready,Javascript,Jquery,Setinterval,Ready,我在运行脚本时遇到了一个实现问题。我正在努力实现的结果如下 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_butt
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()
脚本应该通过点击网站上的hi_按钮
来运行,等待btc_数字
完成加载,因为点击hi_按钮
(虽然我使用setTimeout
给btc_数字
足够的时间来完成加载,但我不确定ready()
功能会更好,或者如何实现),然后检查另一个输出,btc\u lose
。如果btc\u 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()
我的原始问题可在以下网址找到:
现在我给了您的代码一些缩进,我们可以看到发生了什么。。。有点 让我们从javascript中分号的使用开始。在代码块的末尾不需要它,但是您应该明确地使用它,这样您就不会混淆自己和其他人。当您在代码块的后面有另一个语句时,在语句的末尾肯定需要它。换行符不够好。(除非您使用的是coffeescript,它会为您添加这些换行符),所以让我们添加这些换行符。我不知道你到底想做什么,所以你自己去添加吧 接下来让我们看看jQuery。我认为你做错了。
$(“#双击你的\u btc\u bet\u hi\u按钮”)。单击()。这将告诉jQuery为该按钮运行click事件。因此,您几乎是在强制单击该按钮。我认为您试图做的是类似于$('double#u your_btc_bet_hi_按钮')。单击(function(){/*do something*/})代码>
执行设置超时(myFunc(),2500)
是不正确的。你应该把函数名放在那里。因此setTimeout(myFunc,2500)
。否则,javascript将在函数到达该点时调用该函数,并在setTimeout中保留其返回值。因此,您将执行类似于setTimeout(“返回值”,2500)
的操作,这显然不是您想要的
为什么在其他函数中有这么多函数声明?除非你有理由把这些函数放在一个函数里面,否则请把它们拆开。如果它们在您调用的代码块之外声明,您仍然可以调用它们。这样做:
function one(){
/*do something*/
two();
}
function two(){
/*la dee da*/
}
如果您在修复语法错误后仍然存在问题,并使事情看起来更好一些,请对答案进行评论,我会看一看。祝你好运
在使用rollDice=function(){…}
而不是使用function rollDice(){…}
之前也要阅读
更新
虽然这对我来说还不是很重要,也许这是你想要实现的
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();
我不知道你想做什么。你把setInterval()
和setTimeout()
搞混了吗?前者是中继器,后者是自毁的。是的,它应该设置为超时。很抱歉造成混淆,感谢您的回复。您需要传递函数引用,如setTimeout(one,2500)代码>而不是设置超时(一个(),2500)
当前,当使用one()
@Satpal+1时,您将立即调用它。您还可以传递一个匿名函数setInterval(function(){/*procedure*/},2500)代码>但不是在这种情况下。@popla面,当一个人不做任何其他事情时,传递函数引用就足够了