2016-10-01 142 views
0

我正在使用此腳本替換頁面上的某些文本。從循環中停止javascript

function initChangeText() { 
    var time = 2; 
    setInterval('changeText();', time * 1000); 
} 

function changeText() { 
    var divs_ = document.getElementsByTagName("div") 
    for (var i = 0; i < divs_.length; i++) 
    if (divs_[i].className == "change") 
     changeULText(divs_[i]);  
} 

function changeULText(obj) { 
    var ul = obj.getElementsByTagName("ul")[0]; 
    var li = obj.getElementsByTagName("li"); 
    for (var i = 0; i < li.length; i++) { 
    if (li[i].className == "show") { 
     li[i].className = ""; 
     li[(i + 1) % li.length].className = "show"; 
     return; 
    } 
    } 
} 
window.onload = initChangeText; 

問題是這個腳本是循環它自己。我不希望它。我希望它執行一次然後停止。

我該怎麼做?

+1

聽起來像你應該使用'setTimeout',而不是'setInterval' –

+0

你應該避免將一個'string'值'setTimeout'或'setInterval'功能,如解釋[HTTP:/ /stackoverflow.com/a/5801700/6832715](http://stackoverflow.com/a/5801700/6832715) –

回答

3

此:

function initChangeText() { 
    var time = 2; 
    setInterval('changeText();', time * 1000); 
} 

調用腳本的每一秒。刪除功能,改變window.onload = initChangeText;window.onload = changeText;

0

window.onload = changeText;
或者,如果你想保持初始超時: 與setTimeout取代setInterval

1

正如Crayon Violent在評論中所說,您應該使用setTimeout而不是setInterval

從Mozilla開發者網絡:

  • setTimeout

    設置一個計時器,該計時器期滿後,其執行函數或一次指定一段代碼

  • setInterval

    反覆調用一個函數或執行的代碼段,其中每個呼叫之間的固定的時間延遲。返回一個intervalID。

你也可以清除setInterval一段時間後,或許多使用計數器循環之後。

經過一段時間
假設您要執行循環3000毫秒。然後,你可以這樣做:

function initChangeText() { 
    var time = 2; 
    // Store the id to be able to clear it 
    var intervalId = setInterval('changeText();', time * 1000); 
    // Clear the interval 3000 ms after the interval started 
    setTimeout(function() {window.clearInterval(intervalId);}, time * 1000 + 3000); 
} 

function changeText() { 
    // remains the same 
} 

function changeULText(obj) { 
    // remains the same 
} 
window.onload = initChangeText; 

一批循環
後比方說,你要執行你的循環正是6倍。你可以這樣做:

var loopCount = 0; // Initialize a global counter 
var intervalId; // Store the ID in the global scope 
function initChangeText() { 
    var time = 2; 
    intervalId = setInterval('changeText();', time * 1000); // Stores the ID 
} 

function changeText() { 
    // Add an if statement to clear the intervalId when 
    // the loopCount reaches the limit of 6 repetitions 
    if(++loopCount >= 6 && intervalId) { 
    window.clearInterval(intervalId); 
    } 
    // rest of the function remains the same 
} 

function changeULText(obj) { 
    // remains the same 
} 
window.onload = initChangeText;