带条件的ClearTimeout不起作用

时间:2012-03-01 03:30:57

标签: javascript jquery

有人知道为什么这不起作用吗?

http://jsfiddle.net/jonevar/2Z2NQ/5/

以下是整个代码:

function ag_alert(message) {

    event.preventDefault();

    //SetTimeout in case didn't close manualy
    var timer = setTimeout(cls_message, 5000),
        cur_url = window.location.href;

    //Check if its already on
    if (! $('.ag_alert_wrapper').is(':visible') ) {

        //Set the language
        (cur_url.indexOf('/en/') >= 0) ? cls_txt = "close" : cls_txt = "閉じる" ;

        $('<div class="ag_mess ag_alert_wrapper"></div><div class="ag_mess ag_alert_wrapper_close">'+ cls_txt +'</div>')
            .prependTo('body');
        $('.ag_alert_wrapper')
            .append('<p>'+ message +'</p>')
            .animate({top : 0}, 200, function() {
                $('.ag_alert_wrapper_close')
                .animate({top : 90}, 200)
                .on({
                    mouseenter : function () {
                        $(this).animate({
                            top : 100
                        }, 200);
                    },
                    mouseleave : function () {
                        $(this).animate({
                            top : 90
                        }, 200);
                    },
                    click : function () {
                        cls_message();
                    }
                });
            });

        //Setups ESC key to close message
        $(document).keydown(function(e) {
            if (e.keyCode === 27) {
                cls_message();
            }
        });

    } else {
        //if Alert is already visible
        $('.ag_alert_wrapper')
            .children('p').html(message)
            .end()
            .effect("highlight", {
                color : '#FF0'
            }, 1000);

        clearTimeout(timer);
    }

}


function cls_message() {
    $('.ag_mess').animate({
        top : -200
    }, 200, function () {
        $('.ag_mess').remove();
    });
}

1 个答案:

答案 0 :(得分:1)

这似乎工作正常,测试代码(使用jQuery,但这并没有改变结论):

HTML

<div id="msgs"></div>

JS

function other_function() {
    $('#msgs').append('other ');   
}

function do_something(data) {
    var timer = setTimeout(other_function, 500);
    if (data === "condition") {
        $('#msgs').append('hi ');
    } else {
        $('#msgs').append('clearing ');
        clearTimeout(timer);
    }
}

do_something('yay');

do_something('condition');

将此输出到div:

clearing hi other

正如所料。实例:

希望这有帮助。