搜尋

首頁  >  問答  >  主體

javascript - 四個倒數計時,到0時觸發函數,如果同時處罰怎麼讓觸發事件只執行一次?

倒數計時為0時處罰函數,有一種情況是當四個倒數都為0時會同時觸發ajax()方法,這種情況我只想觸發一次,該怎麼做?
我試過宣告一個count去計數,超過1就不執行ajax()方法,但是這樣有可能後面的倒數都不執行的,因為不滿足count不超過1的邏輯,該怎麼做呢?

html
<span class="clock">4:00</span>//倒计时是循环的,到0后恢复为4分钟,其他一样
<span class="clock">3:00</span>
<span class="clock">2:00</span>
<span class="clock">1:00</span>

js
$('.clock').each(function(elem,index){
  $(this).on('finish',function(){//倒计时为0时触发ajax()方法
    ajax();
  });
});
大家讲道理大家讲道理2723 天前744

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-06-12 09:25:23

    JS 單執行緒所以不會同時觸發,你可以維護一個變數記錄上次執行函數的時間,隔太近則不執行第二遍。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:25:23

    定義一個變數作為請求狀態,預設為false,表示目前無請求,請求開始前判斷是否為true,是則說明上次請求未仍在繼續,否則設為true,並開始執行請求,Ajax的complete 方法設定無論成功與否都還原該狀態為false,以便下次請求可用。也就是說,用一個全域或局部變數控制狀態。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:25:23

    嘗試這樣:

    let loading = false
    $('.clock').each(function () {
        $(this).on('finish', function () {
            if (loading) return
            loading = true
            ajax({
                finish: function () {
                    loading = false
                }
            })
        })
    })

    回覆
    0
  • 取消回覆