Onderbreek een javascript omleiding met een vertraging

Ik gebruik momenteel een eenvoudige JavaScript-omleiding (genaamd load) met een vertraging om gebruikers automatisch om te leiden van oudere naar nieuwere artikelen in een bedrijfswiki. Id, zoals gebruikers, kunnen de autoredirect echter stoppen, zodat ze indien nodig toegang hebben tot de oudere gegevens.

Hoe kan ik deze code wijzigen om dat te bereiken?

<script type="text/javascript">
var h = setTimeout("iiredirect()", 2000);
function iiredirect() { window.location = "that new location"; }
</script>
0
@PeterOlson: waarom? Het lijkt erop te werken: jsfiddle.net/simtali/P2ehw
toegevoegd de auteur Daniel, de bron
Ah, ik heb het string-vs-functiebit gemist en dacht dat je refereerde naar functie-referentie versus call.
toegevoegd de auteur Daniel, de bron
Ah, dat verklaart waarom mijn voorbeeld goed lijkt te werken (maar niet).
toegevoegd de auteur Daniel, de bron
Alsjeblieft, verander alstublieft "iiredirect ()" in iiredirect .
toegevoegd de auteur Peter Olson, de bron
@Daniel Ze werken allebei, maar het doorgeven van een stringparameter naar setTimeout of setInterval geeft een waar van de code in de string, wat niet nodig is als je een functie kunt doorgeven in direct.
toegevoegd de auteur Peter Olson, de bron
@Daniel Het doorgeven van een functieaanroep zal onmiddellijk de functie oproepen. Het geeft door wat de functie teruggeeft naar setTimeout . Als u setInterval hebt gebruikt en een functieaanroep hebt doorgegeven, ziet u dat de functie maar één keer wordt uitgevoerd en als u de vertraging in setTimeout tijdens een functieaanroep verhoogt, merkt u dat dat er geen vertraging is.
toegevoegd de auteur Peter Olson, de bron

2 antwoord

Ervan uitgaande dat de knop een verwijzing is naar uw knop omleiden annuleren .

var timeout = setTimeout(function() {
    window.location = "that new location";
}, 2000);

button.addEventListener('click', function() {
    clearTimeout(timeout);
}, false);
2
toegevoegd

clearTimeout (h) zou het moeten doen. Dat zal de loop time-out annuleren.

2
toegevoegd