Это перефразированный вопрос из здесь. После некоторого тестирования я изолировал проблему, но не знаю, как ее исправить. Нет необходимости читать предыдущий вопрос, это упрощенный код:
ПРОБЛЕМА -> 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")
доступен, он корректно срабатывает отовсюду. Очевидно, есть проблема с запуском события мыши внутри функции цикла.
Какие-либо предложения?
setTimeout(function () { $("#anchorLink").trigger('click'); }, 5000);
. Вы вообще не используете интервал, вы просто копируете тайм-аут. - person deceze♦   schedule 18.02.2011