Как обойти отсутствие успешного обратного вызова в ZRSSfeed?

#jquery #rss #event-handling

#jquery #RSS-канал #обработка событий

Вопрос:

У меня есть страница канала, к которой должен быть применен обработчик кликов для каждой ссылки в rss-канале..

Я использую ZRSSfeed, который великолепен, но он не выполняет обратные вызовы, поэтому функция .click () запускается задолго до поступления содержимого rss

здесь есть такая проблема:

http://jsfiddle.net/PMtCN/

большое спасибо

Комментарии:

1. интересное замечание, очевидно, есть исправление для добавления обратного вызова в Zrssfeed в плагинах сайта jquery . jquery.com/node/14919

Ответ №1:

Если я правильно понимаю проблему, вы хотите прикрепить обработчик кликов к результату, но не знаете, когда будет загружен контент. Если это так, то просто используйте live:

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

http://jsfiddle.net/PMtCN/11/

  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) '...');
        });
    });
});
  

http://www.zazar.net/developers/jquery/zrssfeed

Ответ №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. это очень хороший подход грубой силы, который пригодится где-нибудь, но не здесь! .. большое спасибо