Jquery计时器只运行一次?

时间:2012-12-05 15:00:05

标签: javascript jquery jquery-plugins

我正在研究一些js / jQuery,但我遇到了一个问题。

有一个定时器应该每隔x秒执行一次功能。然而,问题是计时器似乎只执行一次。我问过一些朋友,但他们也不知道出了什么问题。

所以,如果有人有线索,请!

<script type="text/javascript">

    var id = 0;
    var count = 0;
    var obj;

    console.log(id);

    function getTweetsWithQuery(q) {
        console.log('getTweetsWithQuery did run');
        $.ajax({
            type: "GET",
            url: "ajax.php",
            data: "q=" + q,
            success: function(msg){

                obj = jQuery.parseJSON(msg);
                start();
            }
        });
        console.log('getTweetsWithQuery finished');
    }

    function updateTweets(obj) {

       var count = 0;

       $('#tweet' + id).animate({opacity: 0}, 1).delay(500);
       $('#tweet' + id).text(obj[count].text);
       $('#tweet' + id).delay(500).animate({opacity: 1}, 500);

       console.log(obj[count].text);
       console.log('updateTweets did run');

       if(id == 9){
        id = 0;
       }else {
        id++;
       }

       if(count == obj.length){
        count = 0;
       }else {
        count++;
       }



       console.log('Next id: ' + id);
       console.log('Next count: ' + count);


   }

   function start() {

    console.log('start did run')

    var timer = $.timer( updateTweets(obj) );

    timer.set( { time : 500, autostart : true } );

   }
 </script>

从html中调用getTweetsWithQuery()函数。

2 个答案:

答案 0 :(得分:4)

您正在调用该函数,而不是为其分配引用。

var timer = $.timer( function(){ updateTweets(obj); } );

答案 1 :(得分:0)

好吧这不理想,但我认为这可行:

function start() {

    console.log('start did run')

    var timer = $.timer( function(){
        ar count = 0;

        $('#tweet' + id).animate({opacity: 0}, 1).delay(500);
        $('#tweet' + id).text(obj[count].text);
        $('#tweet' + id).delay(500).animate({opacity: 1}, 500);

        console.log(obj[count].text);
        console.log('updateTweets did run');

        if(id == 9){
           id = 0;
        }else {
           id++;
        }

        if(count == obj.length){
           count = 0;
        }else {
           count++;
        }

        console.log('Next id: ' + id);
        console.log('Next count: ' + count);
    });

    timer.set( { time : 500, autostart : true } );

   }

从我在该插件的源代码中看到的,它似乎与函数对象有问题。我不确定为什么,而且我没有足够的技能来消化源并弄清楚发生了什么,但是如果传入函数定义它似乎确实有效。

这里有一个小提示,显示你有什么以及我是如何让它工作的。