条件为的ClearTimeout不工作

ClearTimeout with condition is not working

本文关键字:工作 ClearTimeout 条件      更新时间:2023-09-26

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

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();
    });
}

这似乎运行良好,测试代码(使用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

正如预期的那样。实例:

  • http://jsfiddle.net/mCdxV/

希望这能有所帮助。