jQuery .trigger('click') внутри интервальной функции?

Это перефразированный вопрос из здесь. После некоторого тестирования я изолировал проблему, но не знаю, как ее исправить. Нет необходимости читать предыдущий вопрос, это упрощенный код:

ПРОБЛЕМА -> trigger('click') выполняется, но событие не запускается внутри циклической (интервальной) функции

$(document.ready(function(){
    var checkForConfirmation = function(){
        clearInterval(checkInterval);
        $("#anchorLink").trigger('click');
    }
    var checkInterval = setInterval(function(){checkForConfirmation()}, 5000);
});

Функция вызывается с интервалами. При правильном ответе интервал останавливается и имитирует щелчок по якорной ссылке.

В html-файле есть якорная ссылка <a id="anchorLink" href="#hiddenDiv">Show</a>.
Она указывает на скрытый div, в котором есть какой-то контент. Я использую плагин Fancybox, чтобы показать скрытый div при нажатии на якорную ссылку.

Если я нажму на ссылку Show, fancybox отобразится, как и ожидалось.
Если я получу ответ от серверной части, код будет выполнен, как и ожидалось, но fancybox не будет показан.
Если я перенесу $("#anchorLink").trigger('click'); за пределы функции checkForConfirmation, fancybox показывает.
Когда я заменяю $("#anchorLink").trigger('click'); на $("#anchorLink").text('Im clicked');, строка отображается в теге <a id="ancoredLink">.

Это резюме, я пробовал это в разных ситуациях.
Проблема, очевидно, заключается в запуске события click во время функции цикла. Селектор $("#anchorLink") доступен, он корректно срабатывает отовсюду. Очевидно, есть проблема с запуском события мыши внутри функции цикла.

Какие-либо предложения?


person ZolaKt    schedule 18.02.2011    source источник
comment
На самом деле это не имеет никакого отношения к проблеме, но весь этот фрагмент можно сократить до setTimeout(function () { $("#anchorLink").trigger('click'); }, 5000);. Вы вообще не используете интервал, вы просто копируете тайм-аут.   -  person deceze♦    schedule 18.02.2011
comment
Да, я знаю. Моя проблема немного сложнее, поэтому мне действительно нужны интервалы, а не тайм-аут. См. соответствующий вопрос, если интересно. Это изолированный и упрощенный код из моей проблемы.   -  person ZolaKt    schedule 18.02.2011


Ответы (1)


Пытаться:

$(document).ready(function(){
  // ...
});

вместо:

$(document.ready(function(){
  // ...
});
person rsp    schedule 18.02.2011
comment
Хороший улов, но это, видимо, просто опечатка (в этом вопросе не рабочий код). В предыдущем вопросе это правильно. - person ; 18.02.2011
comment
@D_N: Это просто опечатка. Понял это правильно в моем коде. Спасибо за ваш пример. Но мой код все еще не работает. Вы пробовали открывать fancybox? - person ZolaKt; 18.02.2011
comment
Наконец-то заработало. Как вы сказали, код в порядке. У меня был другой скрипт, загруженный с помощью ajax, который также включал jQuery. В этом была проблема. Спасибо за поддержку! - person ZolaKt; 18.02.2011