Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Замыкание clearTimeout работают в IE, не работают в FF / 12 сообщений из 12, страница 1 из 1
30.09.2008, 12:21
    #35567265
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Есть примерно такой код/
При клике на кнопке 1 функция начинает бесконечно выполняться каждые 10 милесекунд.
При клике на кнопке 2 нужно остановить выполнение этой функции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
myObj = function(element) {
    AjaxControlExtender1.ClientBehavior1.initializeBase(this, [element]);
   
    // Указатель на setTimeout
    this._Timer = null;
}


myObj.prototype = {
    initialize: function()
    {
        // Вешаю обработчик нажатия на  1  кнопке (при клике this._movetop())
        ... this._start();

        // Вешаю обработчик нажатия на  2  кнопке (при клике this._stopmotion())
        ... this._stop();
    }

    _start : function()
    {
        // Запускаю таймер
        var me = this;
        this._Timer = window.setTimeout(function(){ me._movetop() },  10 );
    }

    _stop : function()
    {
        clearTimeout(this._Timer);
    }
}

В IE при клике на кнопке 2 выполнение _start() останабливается, а в FF нет.
Как поправить код?

Спасибо.
...
Рейтинг: 0 / 0
30.09.2008, 12:40
    #35567343
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
setTimeout вызывает функцию один раз, где тут бесконечность? или ты успеваешь нажать на Stop за 10ms? O_o
мало кода, нужно больше
...
Рейтинг: 0 / 0
30.09.2008, 12:44
    #35567353
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
зыsetTimeout вызывает функцию один раз
Да, он вызывает функцию которая опять делает новый setTimeout(), который вызовет эту же функцию второй раз. При втором вызове опять будет новый setTimeout() вызывающий эту же функцию...
...
Рейтинг: 0 / 0
30.09.2008, 13:02
    #35567413
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
А чем setInterval не нравиться?
...
Рейтинг: 0 / 0
30.09.2008, 13:06
    #35567430
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
ShSergeА чем setInterval не нравиться?Только переписал - все равно не работает.
...
Рейтинг: 0 / 0
30.09.2008, 13:09
    #35567436
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Напиши малюсенький примерчик в несколько строк, который не работает и запости.
...
Рейтинг: 0 / 0
30.09.2008, 13:20
    #35567462
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Alex_BBB
Да, он вызывает функцию которая опять делает новый setTimeout(), который вызовет эту же функцию второй раз. При втором вызове опять будет новый setTimeout() вызывающий эту же функцию...
может у тебя в этих функциях проблема, или мы должны догадываться?
...
Рейтинг: 0 / 0
30.09.2008, 13:33
    #35567492
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Похоже действительно, проблема в функциях где-то... Маленький примерчик работает и в IE и в FF:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Untitled Page</title>
    <script type="text/javascript">
    myObjj = function ()
    {
        this._Timer = null;
    }
    
    myObjj.prototype = {
        initialize : function()
        {
            //alert("asas");
        
            var but1 = document.getElementById("Button1");
            $addHandlers(
                but1,
                { 'click' : this._start },
                this);
            //but1.onclick = this._start();
            
            var but2 = document.getElementById("Button2");
            $addHandlers(
                but2,
                { 'click' : this._stop },
                this);
            //but2.onclick = this._stop();
        },
        
        _start : function()
        {
            // действия
            var div = document.getElementById("div1");
            div.innerHTML = div.innerHTML + "/";
            
            var me = this;
            this._Timer = window.setTimeout(function(){ me._start() },  10 );
        },
        
        _stop : function()
        {
            window.clearTimeout(this._Timer);
        }
    
    }
    </script>
</head>
<body>
    
    <input id="Button1" type="button" value="START" />
    <input id="Button2" type="button" value="STOP" />
    
    <div id="div1"></div>

    <script type="text/javascript">
        var meeeee = new myObjj();
        meeeee.initialize();
    </script>

</body>
</html>
...
Рейтинг: 0 / 0
30.09.2008, 13:40
    #35567512
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
если реальный (большой) пример выложу, кто-нить будет смотреть? может сразу в глаза бросится
...
Рейтинг: 0 / 0
30.09.2008, 13:48
    #35567532
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
так если работает маленький, зачем его выкладывать? сделай так чтобы не работал :)
...
Рейтинг: 0 / 0
30.09.2008, 14:04
    #35567578
The_ShadoW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Если Ваш большой пример не работает, значит скорее всего ссылка this._Timer слетает в Вашей _movetop() куда-то влево. Соответственно, впоследствие clearTimeout(this._Timer) вычищает что-то левое (или вообще ничего), а таймер продолжает работать.

Показывайте код с отрывками функции _movetop, чтобы было понятно, как там у вас setTimeout заново делается. Если из _movetop еще глубже куда-то ползет - тоже показывайте.
Только код, релевантный таймеру. Чтоб портянку не читать.
...
Рейтинг: 0 / 0
30.09.2008, 14:42
    #35567706
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание clearTimeout работают в IE, не работают в FF
Спасибо разобрался.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Замыкание clearTimeout работают в IE, не работают в FF / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]