如何设置onclick自动重复?还是自动重复功能? - javascript

现在的情况是:

我有一个按钮,单击该按钮会将其ID发送到php页面,然后清理表并在该列上附加一个新表。

我现在面临的问题是,我想在单击按钮后每30秒自动更新一次表格,但是我自己不想再次手动单击它。我尝试了setTimeOut,但是它停止显示表,而不是每个时间间隔都更新它。

我的HTML按钮:

<button type="button" onclick="ETArequest(this) " id="d1stop" class="list-group-item" style="text-align:center; height:30px; font-size:15px;"></button>

我的JavaScript:

function ETArequest(button) {
 if (button == "") {
    $('#ETAcol').empty();
    return;
} else { 
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            $('#ETAcol').empty();
            $('#ETAcol').append(xmlhttp.responseText);
        }
    };

    xmlhttp.open("GET","getTime.php?q="+(button.id),true);
    xmlhttp.send();

}}

参考方案

这取决于您如何设置超时。重复函数调用的最佳方法是:

var 
    delay = 30000,
    f = function() {
        ETArequest($('button'));
        setTimeout(f, delay);
    };
setTimeout(f, delay);

这样,您仅在功能完成后才开始新的等待。

但是,在您的情况下-发送异步请求时,应在请求完成后开始超时:

var 
    delay = 30000,
    f = function() {
        ETArequest($('button'), f, delay);
    };
setTimeout(f, delay);

function ETArequest(button, callback, delay) {
    //... YOUR CODE

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            $('#ETAcol').empty();
            $('#ETAcol').append(xmlhttp.responseText);
            setTimeout(callback, delay);
        }
    }
}

同样不要忘记您必须正确设置函数的作用域和参数!

如果使用jQuery发送AJAX,则可以这样使用:

var 
    delay = 30000,
    f = function() {
        ETArequest($('button')).always(function() { setTimeout(f, delay); });
    };
setTimeout(f, delay);

function ETArequest(button, callback, delay) {
    //... YOUR CODE

    return $.ajax(url, options);
}

函数ajax返回一个promise-如果将函数传递到其always方法中,则它将在ajax完成后被调用。有关详细信息,请参见jQuery.ajax()。

要启动和停止自动更新:

function autoupdate() {
    var 
        delay = 30000,
        f = function() {
            ETArequest($('button'), f, delay);
        };

    if (!window.autoupdate) {
        window.autoupdate = setTimeout(f, delay);
        $('button').text('Stop');
    }
    else {
        clearTimeout(window.autoupdate);
        window.autoupdate = false;
        $('button').text('Update');
    }
}

在XHR响应中:

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        $('#ETAcol').empty();
        $('#ETAcol').append(xmlhttp.responseText);

        if (false !== window.autoupdate) {
            setTimeout(callback, delay);
        }
    }
}

该按钮将同时作为开始和停止:

<button id=start onclick="autoupdate();">Update</button>

说明:单击“停止”按钮时,您需要清除超时,但也要记住,如果您在浏览器等待响应(并且没有运行计时器)的情况下单击“停止”,则自动更新已停止,因此不启动新的更新。 。

如果我得到url(''),我该如何使用另一个URL - javascript

我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

使用JS和PHP更改弹出窗口背景图像 - javascript

我有一个JS函数:function zoom(now) { document.getElementById("popup").style.display = "block"; document.getElementById("photos").style.backgroundImage = …

打印二维阵列 - javascript

我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…

获取JavaScript值到C#字符串 - javascript

                        是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…