2012-04-06 124 views
10

我想有一個由它自一格的左屬性變化 - 一個每秒當你將鼠標懸停所以我做了這個:setInterval()不重複。作品只有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」

+0

的timerId是.hover(函數()...嘗試$之前定義的timerId( 「div.scroll_left」)的範圍內定義...(我不;噸認爲這個地址的setInterval重複問題,但它是一個開始) – 2012-04-06 20:02:31

+0

你可能想考慮使用['.animate()'](http://api.jquery.com/animate)。 – 2012-04-06 20:59:39

回答

14

所以,你有兩個不同的問題在這裏:

// (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 。你是而不是傳遞函數本身。

13

setInterval根本不起作用。你沒有把它作爲第一個參數傳遞給它。

您正在調用alert立即並試圖使用它的返回值作爲函數重複。

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

除了刪除警報()''並且放回'slideleft()'函數。沒有人想要在一個時間間隔內發出提示。 – jfriend00 2012-04-06 20:04:53

+0

這不適用於setInterval(function(){$('。license_video').css('left',left_num + %「)},1000);這就是爲什麼我以前不使用它我仍然收到「未捕獲的ReferenceError:timerID未定義」錯誤 – 2012-04-06 20:10:51

+0

@RosengustaGarrett我的答案解釋瞭如何解決「未捕獲的ReferenceError」問題。 – 2012-04-06 20:41:41

5

您正在分配null作爲調用的函數。爲什麼?因爲您調用alert並將其返回值分配給setInterval參數。

相反,可以使用匿名函數:

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

很容易;-) ...我愛jQuery的,不管一個版本...ü需要JavaScript的純被髮送PM我是可以提供幫助。

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>