clearTimeout无法使用多种功能

时间:2019-05-02 16:20:32

标签: jquery timeout settimeout cleartimeout

clearTimeout在我的代码中不起作用。我定义了全局变量,因此每个函数都应该可以访问它。这是我的代码,可以更好地理解(请参见代码中的注释):

$(document).on('click', '#submit', function() { /* SECOND CLICK IS AFTER ~2 SECONDS */
    var timeout;

    validation();

    mysql();

    function validation() {
        if (condition) {
            if (timeout) {
                console.log('timeout set');
            } else {
                console.log('timeout not set'); /* GET THIS BUT TIMEOUT MADE CHANGE AFTER DEFINED TIME */

            clearTimeout(timeout);

            if (timeout) {
                console.log('timeout set');
            } else {
                console.log('timeout not set'); /* GET THIS */
            }
        }   
    }

    function mysql() {
        $.ajax({
            type: 'POST',
            url: $(form).attr('action'),
            dataType: 'json',
            data: formData,
            contentType: false,
            processData: false,
            success: function(response) {
                timeout = setTimeout(function() {
                    $('.message').html('message for user');
                }, 7500);
            }
        })
    }
});

1 个答案:

答案 0 :(得分:1)

$(document).on('click', '#submit', function() { /* SECOND CLICK IS AFTER ~2 SECONDS */
    var timeout;

问题在于您使用timeout的范围。它的作用域为click事件处理程序。因此,每次执行此单击逻辑时,它都会为上下文创建一个新实例。如果要为所有点击共享一个超时变量,则需要将其移到事件处理程序之外的更高范围。

有关javascript中变量范围的更详细的问题,请参考:What is the scope of variables in JavaScript?