#javascript #css #mootools #mootools-events #mootools-more
#javascript #css #mootools #mootools-события #mootools-больше
Вопрос:
У меня возникли некоторые проблемы с добавлением подсказок к запросу.Функция HTML. У меня есть div, который обновляет свое содержимое каждые 30 секунд. Возвращаемое содержимое содержит серию разделов с именем класса «.liveReader».
Вот JS, который я должен инициировать содержимое
window.addEvent('domready', initLiveContent);
function initLiveContent()
{
var tips = new Tips('.liveReader');
(function() { refreshPanel() }).periodical(30000);
refreshPanel();
}
function refreshPanel()
{
var myRequest = new Request.HTML({
url: '/inc/liveFeed.aspx',
update: $('liveContent'),
method: 'get',
onComplete: function() {
tips.attach('.liveReader');
}
});
myRequest.send();
}
Итак, HTML — это
<div id="liveContent">
<div id="item1" class="liveReader" title="item 1"><p>Text 1</p></div>
<div id="item2" class="liveReader" title="item 2"><p>Text 2</p></div>
</div>
Но все, что я вижу, это обычный заголовок всплывающей подсказки! есть идеи ?!!
Ответ №1:
Ваша проблема связана с областью видимости переменной.
Ваш onComplete
обработчик использует ссылку на tips
, в то время как эта переменная является локальной для initLiveContent
функции. Следовательно, onComplete
вызов завершается с ошибкой.
Итак, первый совет (без каламбура): всегда начинайте с реального отладчика и устанавливайте для него прерывание при всех исключениях. В противном случае, поскольку ошибка («неопределенная переменная tips
«) выдается из обратного вызова, она не будет отображаться в стандартной консоли.
Затем два способа исправить ваш код:
- Создайте
tips
общую переменную. Вы могли бы, например, объявить его в функции, которая будет вторым аргументом вашегоwindow.addEvent
вызова, а затем ссылаться на него в обоихinitLiveContent
иonComplete
в обратном вызове. - Гораздо более капризный 🙂 Используйте хранилище элементов для динамического извлечения вашего
Tips
экземпляра из обновленного контейнера. Это:function initLiveContent() { var tips = new Tips('.liveReader'); // … your previous code … $('liveContent').store('tip', tips); } function refreshPanel() { var destination = $('liveContent'); var myRequest = new Request.HTML({ update: destination, // … your previous code … onComplete: function() { destination.retrieve('tip').attach('.liveReader'); } }); myRequest.send(); }
🙂