簡體   English   中英

綁定內的JavaScript setInterval

[英]JavaScript setInterval inside bind

我試圖做一個無限的周期性獲取循環:

<script type=text/javascript>
    $(function() {
        $('a#log').bind('click', setInterval(function() {
            $.get(
                $LOG + '/json_test',
                {},
                function(data) {
                    document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
                }
            );
         }, 2000));
  });
</script>

如果我這樣做

<script type=text/javascript>
    $(function() {
        $('a#log').bind('click', function() {
            $.get(
                $LOG + '/json_test',
                {},
                function(data) {
                    document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
                }
            );
         });
  });
</script>

一切正常,但沒有無限循環。

正如@sacho所說, setInterval()返回一個數字。 您將該數字綁定為點擊處理程序而不是函數。 這就是為什么不起作用,但是...

您可以執行以下操作,只是想在每次完成時都調用ajax函數,不能確定您的響應將是每2000ms。

$('a#log').click(function (e) {
    e.preventDefault();
    infiniteLoop();
})


function infiniteLoop() {
    $.get(
        $LOG + '/json_test',
        {},
        function(data) {
            $("#logs").html(data.replace('\n', '<br/>'));
            infiniteLoop();
        }
    );
}

注意:如果已經加載庫,則可以每次使用jQuery(專門用於管理DOM)

您需要將setInterval函數包裝在一個中間函數中,以防止在單擊之前執行它。 換句話說,在函數內部的函數。

$(function () {
    $('a#log').bind('click', function () {
        setInterval(function () {

            $.get('example.json',{}, function (data) {

                $('#logs').html(JSON.stringify(data).replace('\n', '</br>'));
            });

        }, 2000);
    });
});

JSfiddle工作演示: http : //jsfiddle.net/x13sruaf/

$('a#log').on('click', infiniteLoop);
function infiniteLoop() {
    setInterval(function() {

    }, 2000);
}

您可以嘗試以下方法:

<script type=text/javascript>
    $(function() {
        var refreshIntervalId;
        $('a#log').bind('click', function (){
            clearInterval(refreshIntervalId);
            refreshIntervalId = setInterval(function() {
                $.get(
                    $LOG + '/json_test',
                    {},
                    function(data) {
                        document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
                    }
                );
             }, 2000);
       });
    });
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM