2016-07-25 8 views
0
Arbeits

Trotz unter supportchatinterval = null; UND clearInterval(supportchatinterval); in meinem Code mit (siehe onBlur() und onFocus()) all 5000ms die Funktion noch getTableSupport.php am gleichen setInterval wird geladen (siehe checkForChangesSupport(). Wenn die Funktion onBlur gesetzt ich mag die setInterval stoppen, bis onFocus wieder aufgerufen wird.clearInterval und Stellgröße nicht auf null

<script> 

supportchatinterval = 5000; 

$(document).ready(function(){ 
    checkForChangesSupport(); 
    setTimeout(checkForChangesSupport, supportchatinterval); 
}); 

function checkForChangesSupport() { 
    $.get("getCountSupport.php", function(response) { 
     if(response == 1) { 
     refreshTableSupport(); 
     } 
setTimeout(checkForChangesSupport, supportchatinterval) 
    }); 
} 

function refreshTableSupport(){ 
    $('#tableHolderSupport').load('getTableSupport.php'); 
} 

</script> 

<script type="text/javascript"> 

function onBlur(){ 
document.body.className = 'blurred'; 
$.get("afk.php?afk=1"); 
supportchatinterval = null; 
clearInterval(supportchatinterval); 
}; 

function onFocus() { 
document.body.className = 'focused'; 
$.get("afk.php?afk=0"); 
    supportchatinterval = 5000; 
refreshTableSupport(); 
} 

</script> 
+0

1) Du bist Mischen von 'setTimeout' und' setInterval'. 2) 'setTimeout' gibt die Timeout-ID zurück. – gcampbell

+0

Danke ich bin scheinbar blind – michelle

+0

PHP hat nichts mit dieser Frage zu tun, bitte entfernen Sie das Tag :) –

Antwort

1

Es gibt keine Pause zu löschen, da das neue Timeout jedes Mal checkForChangesSupport() läuft erstellt wird. So oder so, supportchatinterval nur eine ganze Zahl und kann nicht sei "clea rot".

Um das zu stoppen, könnten Sie ein Flag einführen und überprüfen, ob die Funktion ausgeführt werden soll oder nicht. Außerdem sollten Sie checkForChangesSupport() anrufen, um den Timer erneut zu starten.

<script> 

supportchatinterval = 5000; 
var flag = 1; 

$(document).ready(function(){ 
    checkForChangesSupport(); 
    setTimeout(checkForChangesSupport, supportchatinterval); 
}); 

function checkForChangesSupport() { 
    if(flag){ 
     $.get("getCountSupport.php", function(response) { 
     if(response == 1) { 
      refreshTableSupport(); 
     } 
     setTimeout(checkForChangesSupport, supportchatinterval) 
     }); 
    } 
} 

function refreshTableSupport(){ 
    $('#tableHolderSupport').load('getTableSupport.php'); 
} 

</script> 

<script type="text/javascript"> 

function onBlur(){ 
document.body.className = 'blurred'; 
$.get("afk.php?afk=1"); 
flag = 0; 
}; 

function onFocus() { 
document.body.className = 'focused'; 
$.get("afk.php?afk=0"); 
flag = 1; 
checkForChangesSupport(); 
} 

</script> 
+0

Das ist peinlich, lass mich dies versuchen und lese die Dokumentation über clearInterval. Ich werde es akzeptieren, wenn alles gut geht. Vielen Dank. Es tut uns leid. – michelle

+0

Jemand wies darauf hin, ich benutze setTimeout in meiner Funktion oben sollte ich es in setInterval ändern? – michelle

+0

Bessere Flip Ihre letzten zwei Aussagen. Ansonsten rufst du 'clearInterval (null);' – aquinas

1

supportchatinterval in Ihrem Fall hat nichts mit dem Timeout zu tun, die derzeit ausgeführt wird. Alles ist so lange, bis der Code läuft. Was Sie tun müssen, ist die tatsächliche Timeout-ID zu speichern, die generiert wird.

theTimeout = setTimeout(checkForChangesSupport, supportchatinterval); 

und Sie, dass

window.clearTimeout(theTimeout); 
0

Ich schlage vor, Sie verwenden setInterval, die zu Ihrem Anwendungsfall mehr ausreichend ist.

Dann auf Unschärfe können Sie es löschen.

Ihr Hauptproblem ist, eine Verwechslung zwischen dem Verzögerungs des Intervalls (als Argument angegeben) und seine Griff die zurückgegeben wird, wenn es eingerichtet wird, und dann als Argument verwendet os clearInterval es abzubrechen.

Code:

// This is a delay between function calls, in milliseconds 
    supportchatinterval = 5000; 
    // This will be the handle returned by setInterval, which be usefull to cancel 
    // it later 
    intervalid = null; 

    $(document).ready(function(){ 
     checkForChangesSupport(); 
     intervalid = setInterval(checkForChangesSupport, supportchatinterval); 
    }); 

    function checkForChangesSupport() { 
     $.get("getCountSupport.php", function(response) { 
      if (response == 1) { 
       refreshTableSupport(); 
      } 
     }); 
    } 

    function refreshTableSupport(){ 
     $('#tableHolderSupport').load('getTableSupport.php'); 
    } 

    function onBlur(){ 
     document.body.className = 'blurred'; 
     $.get("afk.php?afk=1"); 
     clearInterval(intervalid); 
    }; 

    function onFocus() { 
     document.body.className = 'focused'; 
     $.get("afk.php?afk=0"); 
     refreshTableSupport(); 
    } 

Wenn nicht nur wollen Sie die Intervall-Funktion auf Blur Aufruf zu stoppen, aber auch, wenn die Ergebnisse vorliegen, nur clearInterval es nennen:

function checkForChangesSupport() { 
     $.get("getCountSupport.php", function(response) { 
      if (response == 1) { 
       refreshTableSupport(); 
       clearInterval(intervalid); 
      } 
     }); 
    } 
Verwandte Themen