我正在尝试创建一个间隔并发送请求。它将从点击开始,然后单击停止。开始和停止工作很棒。但是在再次按下按钮启动它之后停止间隔后,间隔开始两次。停止并再次启动后,它会开始3个间隔。
这是我的代码:
var running=0
var pathArray = window.location.pathname.split( '.html' );
var pathArray = pathArray.reverse();
var pathArray = pathArray .join('');
var pathArray= pathArray .split('/');
var bidnum=pathArray[3];
$(document).ready(function(){
$('body').append("<div id=\"cdjs\" style=\"position: absolute; top: 30px; background-color: gray; box-shadow: 0px 0px 0px 3px; left: 30px;\">Click to start</div>");
$('#cdjs').click(letswin);
});
function checkandbid(){
if(running==1){
$.get("http://www.bigibid.com/LiveResponder/LR.bid?_as="+bidnum, function(data){
Marray = data.split("'te':'")
time = Marray[1].split("'")
time = time[0]
$('#cdjs').html(time);
if(time < 2 && able==1){
able=0;
$('#ctl00_ContentPlaceHolder1_ibBid').click();
}else{
able=1;
}
});
}
}
function letswin(){
if(running==1){
running=0
clearInterval(IntRun);
delete IntRun;
$('#cdjs').html('Click to start');
}else if(running==0){
running++
delete IntRun;
clearInterval(IntRun);
var IntRun = setInterval(checkandbid, 300);
}
}
function bidders(){
}
这是jsFiddle
答案 0 :(得分:3)
IntRun
变量仅在letswin
函数范围内,每次调用函数时都会重置为未定义的值。
您需要将其声明移到该函数的之外,以便在调用之间记住它的值。
答案 1 :(得分:2)
您的letswin
函数声明了一个名为IntRun
的本地变量。它在调用函数之间不会持续存在。您需要将其移出到包含范围,以便在调用之间进行维护。
另请注意,您对delete
声明的变量不使用var
。仅限于对象属性。 (JavaScript中delete
运算符的目的是从对象中删除属性。)
答案 2 :(得分:1)
这个怎么样?
var running = false;
var checkandbidInterval;
function letswin(){
if (checkandbidInterval) {
clearInterval(checkandbidInterval);
}
if (running){
running = false;
$('#cdjs').html('Click to start');
}
else {
running = true;
checkandbidInterval = setInterval(checkandbid, 300);
}
}
请注意,变量会因为intRun作为局部范围变量而非全局范围而发生变化。
另外,如果要检查变量是0还是1,那么只需使用布尔值(true或false)。