1

我有一个页面,其中一些推文是从 Twitter 动态获取的。这就像一个新闻行情。整个页面在这里http://jsfiddle.net/R6D4R/

该页面在 jsfiddle 中工作,因为内容已经在那里,而实时站点上的内容是动态放置到 div 中的。ticker() 函数仍然有效,但 if 语句没有生效。谁能帮我解决这个问题?

编辑:

对不起,伙计们,我没有澄清为什么要使用 if 语句。该功能独立工作,但我不希望该功能在只有一条推文时运行。这就是为什么我有if (tickerli.length != 1). 我可能应该使用 > 1 而不是 != 1,但你明白了

4

2 回答 2

0

http://api.jquery.com/delegate/

就是这张票!!代表不止一次救了我的命。

于 2012-08-19T23:18:45.927 回答
0

好的,完全重做我的答案,因为我对您的要求感到困惑:

要处理函数中动态添加的元素ticker(),您必须在每次调用函数时重新评估选择器,如下所示:

$(function(){
    function ticker() {
        var tickerLi = $('.tweet_list li');
        if (tickerLi.length > 1) {
            tickerLi.first().fadeOut(function() {
               $(this).appendTo($('.tweet_list')).fadeIn();
            });
        }
    }

    setInterval(ticker, 2000);
}

当我认为您需要有关动态添加元素的事件处理方面的帮助时,这是上一个答案。

要安装将在将来动态添加的元素上工作的事件处理程序,您需要使用委托事件处理。为此,您可以使用:

$(static parent selector).on(event, selector of dynamic element, fn);

注意:有两种形式.on(),一种是静态的,一种是动态的(使用委托事件处理)。要使用动态事件处理,请将.on()处理程序绑定到非动态的父元素,然后传递(作为.on()与动态元素匹配的选择器的第二个参数)。

在您的 jsFiddle 中,对于推文文本的点击处理程序,它的工作方式如下:

$('twitter-container-34').on('click', '.tweet_text', function() {
    // your event handling code here
});

注意:jQuery.on()是在 jQuery v1.7 中添加的。对于早期版本的 jQuery,请使用.delegate().

于 2012-08-19T23:44:53.650 回答