我正在尝试创建一个随机引用生成器。我创建了一个名为timer的函数,每400ms运行另一个函数pickQuote,但目前这似乎不起作用。在pickQuote中我运行一个函数randomNumberGen,它创建一个随机数。我在randomNumberGen中的问题是我想要一个if或if..else来检查新的随机数是否与当前的引号[randomNumber]不同,但我不确定如何做到这一点。
任何人都可以向我提供一些有关如何实现这一目标的见解吗?
我目前的工作可以在这里查看:http://jsbin.com/aqinud/12/edit
答案 0 :(得分:3)
index
未在$.each
之外定义。如果使用var
,则无法在函数外部访问函数中的变量。
我建议改变功能如下:
function randomNumberGen() {
//generate randomNumber based on length of array
// round it down (parseInt is for string->number conversion)
var thisRandomNumber = Math.floor(Math.random() * len);
if ( randomNumber === thisRandomNumber ) {
randomNumberGen();
} else {
randomNumber = thisRandomNumber;
}
}
因此,首先创建一个随机数,只有当它与randomNumber
不同时,才能使用新创建的随机数进行更新。否则,请再试一次。
另外,setTimeout
需要一个函数,所以不要调用它:
runQuotePicker = setInterval(pickQuote, 400);
答案 1 :(得分:3)
也许是这样的:
var currentNumber = -1;
function randomNumberGen() {
var num = parseInt(Math.random() * (len) );
if(currentNumber != num){
currentNumber = num;
return num;
} else {
return randomNumberGen();
}
}
我注意到你错误地将'pickQuote'传递给了setInterval。尝试在匿名函数中包装回调:
function timer() {
runQuotePicker = setInterval(function(){
pickQuote();
}, 1000);
}
否则,您计划在x毫秒内调用pickQuote的结果。