SetInterval() не повторяется. Работает только 1 раз

Я пытаюсь изменить свойство свойства div самостоятельно, каждый раз, когда вы зависали, поэтому я сделал это:

$("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 не определен"

Ответ 1

Итак, у вас есть две разные проблемы:

// (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. Вы не передаете функцию самостоятельно.

Ответ 2

setInterval вообще не работает. Вы не передаете ему функцию в качестве первого аргумента.

Вы вызываете alert немедленно и пытаетесь использовать это возвращаемое значение как функцию для повторения.

var timerID = setInterval(function () { alert(left_num1) }, 1000);

Ответ 3

Вы назначаете null функцию вызова. Зачем? Поскольку вы вызвали alert и назначили его возвращаемое значение параметру setInterval.

Вместо этого используйте анонимную функцию:

setInterval(function() {doStuff();},1000);

Ответ 4

Очень легко;-)... я люблю jquery, неважно, версия... u нужна javascript pure is send pm me is help help.

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>