clearTimeout 不适用于多个功能
clearTimeout not working with multiple functions
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);
}
})
}
});
$(document).on('click', '#submit', function() { /* SECOND CLICK IS AFTER ~2 SECONDS */
var timeout;
问题是您 timeout
的范围。它的范围是单击事件处理程序。因此,每次执行此点击逻辑时,它都会为上下文创建一个新实例。如果您想为所有点击共享一个超时变量,则需要将其移动到事件处理程序之外的更高范围。
关于javascript中变量作用域更详细的问题,请参考:What is the scope of variables in JavaScript?
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);
}
})
}
});
$(document).on('click', '#submit', function() { /* SECOND CLICK IS AFTER ~2 SECONDS */
var timeout;
问题是您 timeout
的范围。它的范围是单击事件处理程序。因此,每次执行此点击逻辑时,它都会为上下文创建一个新实例。如果您想为所有点击共享一个超时变量,则需要将其移动到事件处理程序之外的更高范围。
关于javascript中变量作用域更详细的问题,请参考:What is the scope of variables in JavaScript?