recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Quatre comptes à rebours, la fonction est déclenchée lorsqu'elle atteint 0. Si des pénalités sont imposées en même temps, comment l'événement déclencheur peut-il être exécuté une seule fois ?

Fonction de pénalité lorsque le compte à rebours est à 0. Dans un cas, lorsque les quatre comptes à rebours sont à 0, la méthode ajax() sera déclenchée en même temps. Dans ce cas, je ne souhaite la déclencher qu'une seule fois.
J'ai essayé de déclarer un décompte, et la méthode ajax() ne sera pas exécutée si elle dépasse 1, mais cela risque de ne pas exécuter le compte à rebours suivant car elle ne satisfait pas à la logique selon laquelle le décompte ne dépasse pas 1. Que devrait Je fais?

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();
  });
});
大家讲道理大家讲道理2779 Il y a quelques jours781

répondre à tous(3)je répondrai

  • 大家讲道理

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

    JS est monothread, il ne sera donc pas déclenché en même temps. Vous pouvez conserver une variable pour enregistrer l'heure à laquelle la fonction a été exécutée pour la dernière fois. Si l'intervalle est trop proche, elle ne sera pas exécutée une seconde fois.

    répondre
    0
  • 伊谢尔伦

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

    Définissez une variable comme statut de la demande. La valeur par défaut est false, ce qui signifie qu'il n'y a actuellement aucune demande, déterminez si elle est vraie. Si c'est le cas, cela signifie que la dernière demande ne continue pas. définissez-le sur true et commencez à exécuter la méthode complète d'Ajax Set pour restaurer le statut sur false quel que soit le succès ou l'échec afin qu'il soit disponible pour la prochaine requête. Autrement dit, utilisez une variable globale ou locale pour contrôler l'état.

    répondre
    0
  • 漂亮男人

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

    Essayez ceci :

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

    répondre
    0
  • Annulerrépondre