#jquery #rss #event-handling
#jquery #RSS-канал #обработка событий
Вопрос:
У меня есть страница канала, к которой должен быть применен обработчик кликов для каждой ссылки в rss-канале..
Я использую ZRSSfeed, который великолепен, но он не выполняет обратные вызовы, поэтому функция .click () запускается задолго до поступления содержимого rss
здесь есть такая проблема:
большое спасибо
Комментарии:
1. интересное замечание, очевидно, есть исправление для добавления обратного вызова в Zrssfeed в плагинах сайта jquery . jquery.com/node/14919
Ответ №1:
Если я правильно понимаю проблему, вы хотите прикрепить обработчик кликов к результату, но не знаете, когда будет загружен контент. Если это так, то просто используйте live:
Описание: Прикрепите обработчик к событию для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.
jQuery('#linkwidget a').live("click",function(){
alert('Hello World');
return false;
});
Ответ №2:
В последней версии есть функция обратного вызова, поэтому теперь вы можете выполнять действия с элементами ленты после ее загрузки.
Приведенный ниже пример ограничивает длину заголовка канала 14 символами:
$(document).ready(function () {
$('#test').rssfeed('http://feeds.reuters.com/reuters/oddlyEnoughNews',{},function(e) {
$('h4 a',e).each(function(i) {
var title = $(this).text();
if (title.length > 14) $(this).text(title.substring(0,14) '...');
});
});
});
Ответ №3:
Если вы не можете использовать обратный вызов и хотите индивидуально применить функцию click к каждому узлу сопоставления, вы можете использовать код, подобный этому,
var COM_MYSITE_RSS_CHECK;
var COM_MYSITE_RSS_CHECK_COUNT = 0;
var COM_MYSITE_RSS_CHECK_FREQ = 100;
var COM_MYSITE_RSS_CHECK_MAX = 100;
function wait_for_rss(){
if (jQuery('#linkwidget a').length > 0 || COM_MYSITE_RSS_CHECK_COUNT > COM_MYSITE_RSS_CHECK_MAX )
{
clearInterval(COM_MYSITE_RSS_CHECK);
jQuery('#linkwidget a').click(function(){
alert('Hello World');
return false;
});
}
COM_MYSITE_RSS_CHECK_COUNT ;
}
и затем, после того, как вы вызовете ajax-запрос,
COM_MYSITE_RSS_CHECK = setInterval(wait_for_rss, COM_MYSITE_RSS_CHECK_FREQ);
Или, если индивидуальная привязка к элементам не требуется, вы могли бы изучить метод привязки функций jQuery Live, который не требует, чтобы элементы уже были созданы до привязки.
Комментарии:
1. это очень хороший подход грубой силы, который пригодится где-нибудь, но не здесь! .. большое спасибо