Функция jquery после setTimeout - PullRequest
       4

Функция jquery после setTimeout

2 голосов
/ 10 августа 2010

У меня есть выпадающее меню со следующим:

$(document).ready(function(){
var opened = false;
$("#menu_tab").click(function(){
    if(opened){
        $("#menu_box").animate({"top": "+=83px"}, "slow");
        setTimeout(function(){
                $("#menu_box").animate({"top": "+=83px"}, "slow");
                }, 2000);
                clearTimeout();
    }else{
        $("#menu_box").animate({"top": "-=83px"}, "slow");
    }
    $("#menu_content").slideToggle("slow");
    $("#menu_tab .close").toggle();
    opened = opened ? false : true;
});
});

Таким образом, после нажатия на menu_tab меню выпадает и продолжает работать до тех пор, пока не будет нажата снова, но я бы хотел тайм-аут, чтобы, скажем, через 2 секунды меню снова выпало

Я явно ошибся в кодировании, потому что тайм-аут не работает. Любая помощь будет оценена! ТИА.

Ответы [ 3 ]

1 голос
/ 10 августа 2010

Я думаю, вы пытаетесь сделать что-то вроде этого:

Попробуйте: http://jsfiddle.net/YFPey/

var opened = false;
var timeout;
$("#menu_tab").click(function() {
      // If there's a setTimeout running, clear it.
    if(timeout) {
        clearTimeout(timeout);
        timeout = null;
    }
    if(opened) {
        $("#menu_box").animate({"top": "+=83px"}, "slow");
    } else {
        $("#menu_box").animate({"top": "-=83px"}, "slow");
             // Set a timeout to trigger a click that will drop it back down
        timeout = setTimeout(function() {
            timeout = null;
            $("#menu_tab").click();
        }, 2000);
    }
    $("#menu_content").slideToggle("slow");
    $("#menu_tab .close").toggle();
    opened = !opened;
});​
0 голосов
/ 10 августа 2010

Две вещи, которые меня выделяют:

  1. Поскольку opened запускается как false, таймер запускается только при втором щелчке.
  2. В обработчике таймера, если вы обновляете opened.
0 голосов
/ 10 августа 2010

Ваше использование clearTimeout () здесь неправильно. Вам нужно передать ему ссылку на идентификатор, возвращаемый при создании этого таймера с помощью setTimeout ().

Не могу сказать, вызывает ли это вашу проблему, хотя (вероятно, это не так). Если вы получите что-нибудь в консоли ошибок Javascript, это может помочь.

...