Javascript 如果单击按钮,是否取消设置超时功能?
我有一个Javascript 如果单击按钮,是否取消设置超时功能?,javascript,ajax,settimeout,Javascript,Ajax,Settimeout,我有一个setTimeout函数,它基本上设置了一个计时器来显示AJAX消息,并且无论消息是否成功,它都会重定向到某个页面,如果消息不是成功消息,它会保留在当前表单页面上 现在在显示的AJAX消息中,我有一个关闭按钮,如果单击该按钮,将根据消息是否成功发出警报执行相同的重定向。如果用户选择单击消息中的X按钮,我不希望用户必须等待超时 let timer; let ajax_msgs_div = document.getElementById('ajax_messages'); function
setTimeout
函数,它基本上设置了一个计时器来显示AJAX消息,并且无论消息是否成功,它都会重定向到某个页面,如果消息不是成功消息,它会保留在当前表单页面上
现在在显示的AJAX消息中,我有一个关闭按钮,如果单击该按钮,将根据消息是否成功发出警报执行相同的重定向。如果用户选择单击消息中的X按钮,我不希望用户必须等待超时
let timer;
let ajax_msgs_div = document.getElementById('ajax_messages');
function displayMessages(alert_class, message) {
let ajax_msg = `<div class="alert alert-dismissible ${alert_class}" role="alert">
<button type="button" class="close" data-dismiss="alert"></button>
<span>${message}</span>
</div>`
timer = window.setTimeout(function() {
let close_btn = document.getElementsByClassName('close')[0];
if (alert_class == 'alert-success'){
close_btn.click(location.href="{{ django redirect url on success}")
} else {
close_btn.click();}
}, 3500);
ajax_msgs_div.innerHTML += ajax_msg;
}
您可以通过
clearTimeout(计时器)设置click事件来清除setTimeout
并直接呼叫location.href
function redirect_func(){
if (alert_class == 'alert-success'){
location.href = {{ django redirect url on success }};
} else {
close_button.click();
}
}
timer = window.setTimeout(redirect_func, 3500);
ajax_msgs_div.innerHTML += ajax_msg;
let close_button = document.getElementsByClassName('close')[0];
close_button.addEventListener("click", () => {
clearTimeout(timer);
redirect_func();
});
嘿,多恩。谢谢你的帮助!一切都很好。您是否能够检查编辑,我正在尝试组合两个函数(SetTimeout、AddEventListener)以减少重复代码。但是这个def有效!再次感谢@师父我编辑了我的答案太棒了!真是太棒了。现在有很多道理了!多恩,谢谢!
function redirect_func(){
if (alert_class == 'alert-success'){
location.href = {{ django redirect url on success }};
} else {
close_button.click();
}
}
timer = window.setTimeout(redirect_func, 3500);
ajax_msgs_div.innerHTML += ajax_msg;
let close_button = document.getElementsByClassName('close')[0];
close_button.addEventListener("click", () => {
clearTimeout(timer);
redirect_func();
});