suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Vier Countdowns, die Funktion wird ausgelöst, wenn sie 0 erreicht. Wenn gleichzeitig Strafen verhängt werden, wie kann das Triggerereignis dann nur einmal ausgeführt werden?

Straffunktion, wenn der Countdown 0 ist. In einem Fall, wenn alle vier Countdowns 0 sind, wird die ajax()-Methode gleichzeitig ausgelöst. In diesem Fall möchte ich sie nur einmal auslösen.
Ich habe versucht, einen Count zum Zählen zu deklarieren, und die ajax()-Methode wird nicht ausgeführt, wenn sie 1 überschreitet, aber der nachfolgende Countdown wird dadurch möglicherweise nicht ausgeführt, da sie nicht der Logik entspricht, dass der Count 1 nicht überschreitet. Was sollte Ich tue?

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 Tage vor743

Antworte allen(3)Ich werde antworten

  • 大家讲道理

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

    JS 单线程所以不会同时触发,你可以维护一个变量记录上次执行函数的时间,隔太近则不执行第二遍。

    Antwort
    0
  • 伊谢尔伦

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

    定义一个变量作为请求状态,默认为false,表示当前无请求,请求开始前判断是否为true,是则说明上次请求未仍在继续,否则设置为true,并开始执行请求,Ajax的complete 方法设置无论成功与否都还原该状态为false,以便下次请求可用。也就是说,用一个全局或局部变量控制状态。

    Antwort
    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
                }
            })
        })
    })

    Antwort
    0
  • StornierenAntwort