如何在未来的元素上触发jQuery函数

时间:2012-08-19 23:15:24

标签: jquery

我有一个页面,其中一些推文是从Twitter动态提取的。这就像是一个新闻自动收报机。整个页面都在这里http://jsfiddle.net/R6D4R/

页面在jsfiddle中工作,因为内容已经在那里,而实时网站上的内容动态地放入div中。 ticker()函数仍然有效,但if语句没有生效。任何人都可以帮我解决这个问题吗?

编辑:

对不起,伙计们,我没有澄清为什么if语句适用。该函数可以自行运行,但我不想在只有一条推文的情况下运行该函数。这就是我if (tickerli.length != 1)的原因。我应该使用> 1而不是!= 1,但你明白了

2 个答案:

答案 0 :(得分:0)

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

那是票!!代表不止一次挽救了我的生命。

答案 1 :(得分: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 v1.7中添加了jQuery .on()。对于早期版本的jQuery,请使用.delegate()