Функция обратного отсчета jQuery в IE

#jquery #internet-explorer #countdown

#jquery #internet-explorer #обратный отсчет

Вопрос:

У меня странная проблема с IE8 и ниже, где мой обратный отсчет, который должен срабатывать только один раз, продолжает срабатывать, чего не происходит в современных браузерах. Есть ли способ это исправить? Спасибо! Цель состоит в том, чтобы начать обратный отсчет после выбора ввода.

Код:

 $("input").focus (function counter() {
  $("input").unbind('focus', counter);
  var count = 60;
  countdown = setInterval(function(){
    $(".clock p").html(count);
    if (count == 0) {
      $(".while-ticking").fadeOut(1000);
      $(".countdown-finished").fadeIn(1000);
    }
    else {
        count--;
    }
  }, 1000);
});
  

Ответ №1:

Попробуйте это так:

 $("input").focus(function() { counter(60) });

function counter(count) {
    $("input").unbind('focus');
    setTimeout(function(){
        $(".clock p").html(count);
        if (count == 0) {
            $(".while-ticking").fadeOut(1000);
            $(".countdown-finished").fadeIn(1000);
        }
        else {
            counter(count--);
        }
    }, 1000);
}
  

Редактировать:
Вам нужно создать цикл для обратного отсчета. Итак, что я в основном делаю, начиная с 60, подождите секунду и снова вызовите функцию, но затем с 59 .. и т.д. и т.п. когда значение равно 0, функция больше не вызывается, поэтому она останавливается

Редактировать: я протестировал это следующим образом, и это сработало 🙂 обратный отсчет очень хорошо

 <script type="text/javascript" src=".............../jquery-1.4.4.min.js"></script>
<script type="text/javascript">

    $(document).ready(function() {

        $("input").focus(function() { counter(60) });

    });

    function counter(count) {
        $("input").unbind('focus');
        $(".clock p").html(count);
        setTimeout(function(){
            if (count == 0) {
                $(".while-ticking").fadeOut(1000);
                $(".countdown-finished").fadeIn(1000);
            }
            else {
                console.log(count--);
                counter(count--);
            }
        }, 1000);
    }

</script>


<input type="text" />

<div class="clock">
    <p></p>
</div>
  

Комментарии:

1. Нет, это не работает. Кроме того, необходимо отменить привязку фокуса, счетчика, потому что в противном случае html-атрибут placeholdwer не работает. Но все равно спасибо.

2. Проблема, с которой я сталкиваюсь, заключается в том, что при выборе более одного поля ввода оно снова срабатывает. Возможно, я был недостаточно ясен с самого начала.

3. Он отлично работает в Firefox opera и Chrome, но все еще не в IE:/ Большое спасибо. И когда я включаю функцию счетчика в unbind, она снова запускается во всех браузерах. 🙁

4. Странно то, что весь ваш код, похоже, зависит от консоли. функция регистрации, она не работает без нее.