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