1

私はいくつかの js/jQuery に取り組んでいますが、問題が発生しました。

x 秒ごとに関数を実行するタイマーがあります。ただし、問題は、タイマーが 1 回しか実行されないように見えることです。何人かの友人に尋ねましたが、彼らも何が悪いのか知りませんでした。

誰かが手がかりを持っているなら、お願いします!

<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>

getTweetsWithQuery() 関数は、html 内から呼び出されます。

4

2 に答える 2

4

関数への参照を割り当てるのではなく、関数を呼び出しています。

var timer = $.timer( function(){ updateTweets(obj); } );
于 2012-12-05T15:02:43.750 に答える
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 } );

   }

そのプラグインのソースで見たところ、関数オブジェクトに問題があるようです。理由はわかりませんし、ソースを消化して何が起こっているのかを理解するのに十分なスキルもありませんが、関数定義を渡すとうまくいくようです。

これは、あなたが持っているものと、それをどのように機能させることができたかを示すフィドルです。

于 2012-12-05T15:14:51.553 に答える