javascript - Отменить повторный вызов js-функции


0

Вот код:

$(document).ready(function(){

        var pause = 5000;

        function removeFirstNewsTicket()
        {
            addLastNewsTicket();
        }

        function addLastNewsTicket()
        {
            alert(123123);
        }

        setInterval(removeFirstNewsTicket, pause);

    });

Вопрос в том, почему алерт 2 раза отрабатывает каждые 5 секунд? Вообще заколебал меня js. Объясните кто-нибудь, пожалуйста. Раз и навсегда хочу с этим разобраться= В награду дам очков сколько попросите.

UPD1 makregister. Ничего не помогает. Попробывал вынести - всё без толку

UPD2 Александр, так и сделал. Убрал $(document).ready() - теперь всё как надо.

UPD3 Был подключен css фреймворк http://www.99lime.com/. После отключения всё заработало как нужно. Он тоже использует jQuery. Вопрос: как сделать чтоб через $(document).ready() скрипт работал как надо и не вызывался по 2 раза при подключенном вышеуказанном css-фреймворке? За решение - награда 500 очков маны)

UPD4 У меня один скрипт дважды не подключается. Видимо придется попращаться с 99lime, раз такое дело. А вообще обязательно использовать ready()? Чем чреват отказ от его использования?

а не может быть проблемы в разных версиях jQuery??? библиотека использует 1.6.4 насколько я понимаю... попробуйте тоже запользовать её: ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js 12 янв 20122012-01-12 08:11:45.000000
сделайте заглушку: заведите глобальную переменную, например, firstReady присвойте ей false, а свою ф-циб поменяйте на function removeFirstNewsTicket() { if (firstReady) return; firstReady = true; addLastNewsTicket(); } как-то так. — 12 янв 20122012-01-12 07:28:11.000000
Всё ровно [один][1]. [1]: jsfiddle.net/bumbay/dHRP7/1 12 янв 20122012-01-12 07:16:10.000000
Скрипт один раз подключен? :D — 12 янв 20122012-01-12 07:04:33.000000
[Один][1] же. [1]: jsfiddle.net/bumbay/dHRP7 12 янв 20122012-01-12 06:40:13.000000

3 ответа

0

Прям как в анекдоте, где мужик изучил только взлет на самолете, а про посадку еще ничего не знает )) Для остановки этого цикла есть clearInterval() Вот и тормозните им в месте, где это требуется.

  • 12 янв 2012 2012-01-12 07:01:02
2

Попробуйте вынести определение функций до ready

 var pause = 5000;

        function removeFirstNewsTicket()
        {
            addLastNewsTicket();
        }

        function addLastNewsTicket()
        {
            alert(123123);
        }

$(document).ready(function(){

        setInterval(removeFirstNewsTicket, pause);

    });

Ошибки не вижу должно нормально работать, единственное можно сделать проверку, что окно запущено, ведь мы не знаем сколько времени будет юзер думать пока не закроется алерт, а в это время интервал отсчет ведет.

2

Попробуйте переименовать addLastNewsTicket на addLastNewsTicket1223113413413, например, мало ли что может называться также...

В JS с её отсутствием областей видимости может быть что угодно.

Добавлено из комментария.

Ошибка просто скорее всего глумая какая-то... и скорее всего не в том фрагменте, что вы прислали. Попробуйте отключить jQuery для начала... Так, например:

<html>    
<head>
</head>    
<body>
    <script>
        var pause = 5000;

        function removeFirstNewsTicket() {
            addLastNewsTicket();
        }

        function addLastNewsTicket() {
            alert(123123);
        }

        setInterval(removeFirstNewsTicket, pause);
    </script>
</body>
</html>
кстати, напишите в support 99lime, кому знать, как не им, что там у них происходит. — 12 янв 20122012-01-12 11:03:08.000000
добавлю сюда, так как к самому вопросу коммент не добавляется((( если используется 2 версии библиотеки, то, по идее может быть всё что угодно... порядок выполнения кода и области видимости переменных (которые, кстати одинаково, скорее всего называются в обеих версиях) становится непредстказуемым. кстати, можете пропробовать просто убрать линковку jQuery из своего файла, она и так притянется через библиотеку. — 12 янв 20122012-01-12 10:28:22.000000
Перенесено в ответ. — 12 янв 20122012-01-12 06:56:54.000000
Не знаю что за хрень творится с хэшкодом. Не могу комменты оставлять. Александр, кроме этого кода js-a вообще нет никакого. Только jQuery подключен и всё. exec, там да. 1 раз вызывается. У меня в любом браузере - по 2 раза. UPD1 makregister. Ничего не помогает. Попробывал вынести - всё без толку UPD2 Александр, так и сделал. Убрал $(document).ready() - теперь всё как надо. Вопрос: почему ему не нравился $(document).ready() ?? — 12 янв 20122012-01-12 06:52:34.000000