setTimeout () не выполняется - PullRequest
0 голосов
/ 29 марта 2010

У меня есть эта простая функция, которая отображает сообщение для пользователя. Если я добавлю параметр тайм-аута, он автоматически сдвинется обратно вверх, если пользователю не нужно нажимать его, чтобы избавиться. Но тайм-аут не работает.

function feedback(text, timeout){
    $('#feedback').text(text).slideDown('fast');

    $('#feedback').click(function(){
        $(this).slideUp();
    });
    if(timeout){
        setTimeout(function(){
            $('#feedback').slideup();
        }, timeout);
    }
}

Ответы [ 2 ]

3 голосов
/ 29 марта 2010

Проблема в том, что $('#feedback').slideup(); нужен там капитал U (например, .slideUp()). Вы также можете немного сократить его, выполнив это:

function feedback(text, timeout){
    var fb = $('#feedback').text(text).slideDown('fast');
    if(timeout) fb.delay(timeout).slideUp();

    fb.click(function(){
        $(this).slideUp();
    });
}

При этом используется встроенная функция jQuery delay() для достижения того же эффекта более кратким способом.

0 голосов
/ 29 марта 2010

помещение всего вызова функции в заданную функцию тайм-аута недопустимо. Ваш setTimeout никогда не сработает так, как вы этого хотите, так как setTimeout будет принимать только ссылку на функцию.

setTimeout(function(){
  $('#feedback').slideup();
}, timeout);

Попробуйте следующий код:

var ref = function() {
  $('#feedback').slideup();
};
setTimeout(ref, timeout);
...