2011-03-29 85 views
1

這段代碼爲什麼不能關閉setInterval?我點擊一個元素來啓動它,並且它開始正常(以5秒爲間隔淡入淡出div#內容)。我點擊一個元素來停止它,並且它只是繼續在星期=當前淡入和淡出,即使它最初加載了正確的一週。setInterval:爲什麼不重置?

無論我是否將函數與jQuery封裝分開,都沒有關係。任何幫助讚賞。

$out .= '<script type="text/javascript">'."\n"; 
    $out .= '$(document).ready(function() {'."\n"; 
    $out .= ' $("span.archives").click(function() {'."\n"; 
    $out .= ' $("#content").load("update.php?week=" + this.id);'."\n"; 
    $out .= ' if (this.id == \'current\') {'."\n"; 
    $out .= '  StartStop(\'on\');'."\n"; 
    $out .= ' } else {'."\n"; 
    $out .= '  StartStop(\'off\');'."\n"; 
    $out .= ' }'."\n"; 
    $out .= ' });'."\n"; 

    $out .= ' function StartStop(txt) {'."\n"; 
    $out .= ' if (txt == \'on\') {'."\n"; 
    $out .= '  var refresh = setInterval(function() {'."\n"; 
    $out .= '  $("#content").fadeOut("slow", function() {'."\n"; 
    $out .= '   $("#content").load("update.php?week=current", function() {'."\n"; 
    $out .= '   $("#content").delay(250).fadeIn("slow");'."\n"; 
    $out .= '   });'."\n"; 
    $out .= '  });'."\n"; 
    $out .= '  }, 5000);'."\n"; 
    $out .= ' } else {'."\n"; 
    $out .= '  clearInterval(refresh);'."\n"; 
    $out .= ' }'."\n"; 
    $out .= ' }'."\n"; 
    $out .= '});'."\n"; 
    $out .= '</script>'."\n"; 
+1

有你爲什麼存儲JavaScript的任何原因代碼作爲PHP中的字符串?調試(和維護)非常困難。 – 2011-03-29 07:59:35

+0

即使您將它存儲在代碼中,PHP字符串文字也可以跨越多行:http://www.php.net/manual/en/language.types.string.php – Kobi 2011-03-29 09:21:23

+0

是的,我沒有真正做過任何優化然而。這是一個WordPress插件,但。 – daveycroqet 2011-03-30 11:09:50

回答

1

refresh是內StartStop本地定義,它的值不會保存到StartStop調用之間。
嘗試在它之外定義它,例如:

var refresh; 

function StartStop(txt) { 
    refresh = setInterval(/* ... */); 
} 

此外,您可能希望創建一個新的人之前先清除以前refresh

+0

謝謝。這工作。 – daveycroqet 2011-03-30 10:06:34

+0

@daveycroqet - 沒問題,樂意幫忙!順便說一下,謝謝你把我的聲望提高到30K以上':)' – Kobi 2011-03-30 10:12:59