2

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

関数rotateが定義されていないと言っています。

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

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

8 に答える 8

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);
});

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

于 2011-02-02T15:44:20.120 に答える
2

setInterval文字列を evalに渡しています。これは:

  • デバッグが難しい
  • 非効率的な
  • 醜い
  • 別のスコープで実行

関数のスコープは、内部で定義されている関数に限定されます。

代わりに関数を直接渡します

    var run = setInterval(rotate, speed);
于 2011-02-02T15:46:29.767 に答える
1

setInterval 呼び出しで、rotate を囲む括弧と引用符を省略します。名前ではなく、関数自体を指定しています。入る順番は関係ありません。

于 2011-02-02T15:45:43.943 に答える
1

これは、(私が信じている)独自のコンテキストで効果的に回転を評価しています。に変更します

var run = setInterval(rotate, speed);

そしてそれはうまくいくはずです。

于 2011-02-02T15:46:09.443 に答える
0

または、回転機能を準備完了機能の外に置くことさえできます。

于 2011-02-02T15:45:10.577 に答える
0

これは動作します

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

});
于 2011-02-02T15:46:09.673 に答える
0

rotateグローバルスコープで定義する必要があります。

$(document).ready(function() {
    window.rotate = function() {
        alert ('rotate');
    }
    var speed = 5000;
    var run = setInterval("rotate()", speed);
});
于 2011-02-02T15:46:39.913 に答える
0
$(function() {
   var speed = 5000;
   var rotate = function() {
      alert("rotate");
   };

   window.setInterval(rotate, speed);
});
于 2011-02-02T15:49:34.410 に答える