2011-02-02 8 views
1

jQueryで最も基本的なsetIntervalの例を実装しようとしていて、問題が発生しています。ここで何が間違っていますか?setIntervalの問題

機能の回転は定義されていません。

$(document).ready(function() { 
    var speed = 5000; 
    var run = setInterval("rotate()", speed); 

    function rotate() { 
     alert ('rotate'); 
    } 
}); 

答えて

6

代わりにこれを行います。

$(document).ready(function() { 
    var speed = 5000; 

    function rotate() { 
     alert ('rotate'); 
    } 

    var run = setInterval(rotate, speed); 
}); 

あなたは、単にこれを行うことができます:

$(function() { 
    var speed = 5000; 

    var run = setInterval(function() { 
     alert ('rotate'); 
    }, speed); 
}); 

あなたがクリアできるようにしたい場合は、readyイベントハンドラ外runを宣言する必要があります後で間隔を置いてください。それ以外の場合は範囲​​外になります。

+0

@mheavers:私はするsetInterval上記の関数の宣言を置く通告 - あなたはそれがまだ定義されていない関数への参照を使用することはできません。 –

+0

ありがとう - それは働いた。 – mheavers

+0

これは間違いです。元の例では、コードが表示されているので正しいですが、[巻き上げ](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting)のおかげで、回転が定義され、完全に正しく実行されますその範囲のどこにでも –

0

また、回転機能を準備機能の外に置くこともできます。

1

あなたのsetInterval呼び出しで括弧を省略し、rotateを引用符で囲みます。あなたは名前ではなく、関数そのものを与えています。彼らが入る順序は重要ではありません。

1

これは効果的に(自分が信じている)自分の状況を反映しています。

var run = setInterval(rotate, speed); 

に変更してください。あなたはsetInterval evalに文字列を渡している

$(document).ready(function() { 
    function rotate() { 
     alert ('rotate'); 
    } 
    var speed = 5000; 
    var run = setInterval(function() { rotate() }, speed); 

}); 
0

これは動作します。これは:ハード

  • が異なるスコープ

機能は、それが内部に定義される関数の範囲に制限されて実行

  • 非効率
  • 醜い
  • をデバッグします。

    は、あなたがグローバルスコープでrotateを定義する必要がなく、直接

    var run = setInterval(rotate, speed); 
    
  • 0

    を関数を渡します。

    $(document).ready(function() { 
        window.rotate = function() { 
         alert ('rotate'); 
        } 
        var speed = 5000; 
        var run = setInterval("rotate()", speed); 
    }); 
    
    +0

    しかし、他の人が言ったように - これは醜いです – egze

    0
    $(function() { 
        var speed = 5000; 
        var rotate = function() { 
         alert("rotate"); 
        }; 
    
        window.setInterval(rotate, speed); 
    });