清除后,间隔开始两次

时间:2012-02-23 11:39:29

标签: javascript jquery

我正在尝试创建一个间隔并发送请求。它将从点击开始,然后单击停止。开始和停止工作很棒。但是在再次按下按钮启动它之后停止间隔后,间隔开始两次。停止并再次启动后,它会开始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

3 个答案:

答案 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)。