2

この関数のタイマーをキャンセルまたはクリアする方法を教えてくれる人が必要です。

//Html
    <a id="button" data-url="http://url.com">Click me!</a>

    Redirecting in <span id="timer"></span> seconds...
    <a href="javascript:void(0)" class="cancel">Cancel</a>
// jS
    $('a#button').click(function() {
        var url = $(this).attr("data-url");
        if( url.indexOf("http://")!==0 ){
                url = "http://"+url;
            }
        var seconds = 5,
            el = $('#timer')
        el.text(seconds)
        setTimeout(function countdown() {
            seconds--
            el.text(seconds)
            if (seconds > 0) {
                setTimeout(countdown, 1000)
            }
            else {
                window.open( url , "_self" )
            }
        }, 1000)
    })


    $('a.cancel').click(function(){
        clearTimeout(countdown);
    });

また、私が間違っていることと、これが機能しない理由を教えてください。

4

5 に答える 5

4

これを行う必要があります:

  var myTime;
    $('a#button').click(function() {
    var url = $(this).attr("data-url");
    if( url.indexOf("http://")!==0 ){
            url = "http://"+url;
        }
    var seconds = 5,
        el = $('#timer')
    el.text(seconds)


myTime = setTimeout(function countdown() {
        seconds--
        el.text(seconds)
        if (seconds > 0) {
            myTime =setTimeout(countdown, 1000)
        }
        else {
            //window.open( url , "_self" )
            alert('no');
        }

}, 500);

})


$('a.cancel').click(function(){
        clearTimeout(myTime);

});
于 2012-06-20T18:35:55.727 に答える
3

追加:

var myTime;

myTime = setTimeout(function countdown() {...

それをクリアするには:

clearTimeout(myTime);
于 2012-06-20T18:36:50.577 に答える
1

setTimeout何をクリーアするか教えてください:

countdown = setTimeout(function countdown() {...}

ハンドラーcountdown内で使用できるように、スクリプトの上に宣言されていることを確認してください。click

于 2012-06-20T18:36:42.590 に答える
1

それをうまく行う1つの方法は次のとおりです。

{
var myTime;
myTime = setTimeout(function countdown() {
//blah
alert('Test');
clearTimeout(myTime);
}, 500);
}

次に、変数は単純にスコープされます。

于 2012-06-20T18:39:32.923 に答える
1

私はこのようにします:(編集:ここでチェックしてくださいhttp://jsfiddle.net/URHVd/3/そしてそれはうまくいきます)

var timer = null; //this will be used to store the timer object
var seconds = 5;
var url = null;

function countdown() {
    seconds--;

    el.text(seconds);
    if (seconds > 0) {
        timer = setTimeout(countdown, 1000)
    }
    else {
        window.open( url , "_self" )
    }
}

$('a#button').click(function() {
    url = $(this).attr("data-url");

    if( url.indexOf("http://")!==0 ){
        url = "http://"+url;
    }        
    el = $('#timer');
    el.text(seconds)
    timer = setTimeout(countdown, 1000)
})


$('a.cancel').click(function(){
    clearTimeout(timer);
});​
于 2012-06-20T18:41:59.003 に答える