12

私はdivの左のプロパティをそれ自体で変更しようとしています.1秒ごとにホバリングすると、これを作成しました:

$("div.scroll_left").hover(function(){
    var left_num = $('div.license_video').css("left")
    var left_num1 = parseInt(left_num, 10) - 1;
    var timerID = setInterval(alert(left_num1), 1000);
    //var timerID = setInterval(slideleft(left_num1), 1000);
},function(){
    clearInterval(timerID);
});
//function slideleft(left_num){
    //$('.license_video').css('left', left_num + "%");
//}

理論的には、カーソルを離して間隔を空けるまで、それが繰り返されると考えるでしょう。カーソルを合わせると、一度実行され、繰り返されることはありません(エラーはありません)。次に、ホバーすると、「Uncaught ReferenceError: timerID is not defined」というエラーが表示されます

4

4 に答える 4

19

setIntervalまったく機能していません。最初の引数として関数を渡していません。

alert すぐに呼び出して、その戻り値を繰り返す関数として使用しようとしています。

var timerID = setInterval(function () { alert(left_num1) }, 1000);
于 2012-04-06T19:57:34.837 に答える
17

したがって、ここには 2 つの異なる問題があります。

// (1) timerID needs to be defined in a scope accessible to both hover callbacks
var timerID = null;

$("div.scroll_left").hover(function(){
    var left_num = $('div.license_video').css("left")
    var left_num1 = parseInt(left_num, 10) - 1;

    // (2) Pass a *function* to setInterval
    timerID = setInterval(function () {
        alert(left_num1)
    }, 1000);
}, function(){
    clearInterval(timerID);
    timerID = null;
});

あなたが書くとき

setInterval(alert(left_num1), 1000);
// or
setInterval(slideleft(left_num1), 1000);

alert()またはslideleft()(それぞれ) を呼び出して返された値を に渡しますsetInterval。関数自体を渡しているわけではありません。

于 2012-04-06T19:57:42.793 に答える
7

null呼び出す関数になるように割り当てています。なんで?alertその戻り値を呼び出して setInterval パラメータに割り当てたためです。

代わりに、無名関数を使用します。

setInterval(function() {doStuff();},1000);
于 2012-04-06T19:58:32.957 に答える
0

とても簡単です ;-) ... バージョンに関係なく、jquery が大好きです... javascript が必要です。

umavez = 0;
setInterval(function() {
	if (umavez == 0) {
      for (x=0;x<10;x++) { 
        $('div.test').append('<div>'+x+'</div>');
      }
    }
  umavez = 1;
}, 500);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="test">Linha:</div>

于 2015-10-23T17:27:14.660 に答える