2012-04-06 21 views
10

Próbuję mieć div lewym zmianę własności przez jej własny - jeden w każdej sekundzie, gdy aktywując więc zrobiłem to:Funkcja setInterval() nie jest powtarzana. Działa tylko 1 raz

$("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 + "%"); 
//} 

Teoretycznie można by pomyśleć, że powtarzać aż przenieść twój kursor wyłączony, który czyści odstęp. Po najechaniu na to robi to jeden raz i nigdy się nie powtarza (nie ma błędów). Następnie po odstąpieniu od niego powoduje błąd "Uncaught ReferenceError: timerior nie jest zdefiniowany"

+0

timerId jest zdefiniowana w zakresie .hover (function() ... spróbuj definiowania timerId przed $ ("div.scroll_left") ... (I don; t myśleć to adres pytanie powtarzające setInterval, ale jest to początek).) –

+0

Możesz myśleć o użyciu [.animate() '] (http://api.jquery.com/animate). –

Odpowiedz

14

Więc masz dwa różne problemy:

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

Kiedy piszesz

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

są przechodzącą wartość zwracaną przez wywołanie alert() lub slideleft() (odpowiednio) do setInterval . Jesteś nie przekazując samą funkcję.

13

setInterval nie działa wcale. Nie przekazujesz mu funkcji jako pierwszego argumentu.

Telefonujesz alertnatychmiast i stara się wykorzystać to wartość zwracana jako funkcja powtarzania.

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

Z wyjątkiem usunięcia alertu() 'i przywróć funkcję' slideleft() '. Nikt nie chce alertów z przedziałem – jfriend00

+0

Nie działa z setInterval (function() {$ ('. license_video'). css (" left ", left_num +" % ")}, 1000), dlatego nie używam go wcześniej Nadal otrzymuję komunikat "Uncaught ReferenceError: timer is not defined" error –

+0

@RosengustaGarrett moja odpowiedź wyjaśnia, jak rozwiązać problem "Uncaught ReferenceError". –

5

Przypisanie null jest funkcją do wywołania. Czemu? Ponieważ wywołano alert i przypisano jego wartość zwracaną do parametru setInterval.

Zamiast używać anonimową funkcję:

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

Bardzo proste ;-) ... kocham jQuery, bez względu na wersję ... u need JavaScript jest czysta wysłać PM do mnie jest może pomóc.

umavez = 0; 
 
setInterval(function() { 
 
\t 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>