2015-10-18 46 views
0

我如何使用下面的代碼來顯示變量增量而不會影響彼此,我試圖在同一頁上使用腳本來顯示不同的值,這會增加超時但我在div1和div2中獲得相同的值認爲他們有不同的變種,下面的代碼工作正常,當我在單獨的頁面上使用它們,但是當我把它們放在一起在同一頁上我得到相同的結果爲兩個div。jQuery的數字增量

我需要幫助,使他們在不影響海誓山盟或任何其他可替代

我需要代碼的實際工作,而不是僅僅解釋工作

<script> 
 
    var START_DATE = new Date("May 10, 2010 22:30:00"); 
 
    var INTERVAL = 8; 
 
    var INCREMENT = 60; 
 
    var START_VALUE = 250; 
 
    var count = 0; 
 
    $(document).ready(function() { 
 
    var msInterval = INTERVAL * 1000; 
 
    var now = new Date(); 
 
    count = parseInt((now - START_DATE)/msInterval) * INCREMENT + START_VALUE; 
 
    $('#div1').html(count.toFixed(0)); 
 
    window.setInterval(function(){ 
 
     count1 += INCREMENT; 
 
     $('#div1').html(count.toFixed(0)); 
 
    }, msInterval); 
 
    }); 
 
    </script> 
 

 
    <script> 
 
    var START_DATE = new Date("March 10, 2010 22:30:00"); 
 
    var INTERVAL = 10; 
 
    var INCREMENT = 10; 
 
    var START_VALUE = 350; 
 
    var count = 0; 
 
    $(document).ready(function() { 
 
    var msInterval = INTERVAL * 1000; 
 
    var now = new Date(); 
 
    count = parseInt((now - START_DATE)/msInterval) * INCREMENT + START_VALUE; 
 
    $('#div2').html(count.toFixed(0)); 
 
    window.setInterval(function(){ 
 
     count1 += INCREMENT; 
 
     $('#div2').html(count.toFixed(0)); 
 
    }, msInterval); 
 
    }); 
 
    </script>

+2

它們是相同的變量,因爲你在全局範圍內聲明它們 –

+0

你能幫助你使用上面提供的代碼的這個解決方案嗎? @Jared – user3476168

回答

1

雖然dzylich的答案是正確的,這裏是發生了什麼的更透徹的解釋:

JavaScript有沒有一個全球範圍內有關模塊或名稱空間的知識。在script標籤的頂部範圍內聲明的任何var是在全局命名空間,所以你的代碼運行,如果你寫了:

var count1 = whatever; 
//do some stuff 
var count1 = whatever; //count1 redeclared! 
在同一 script

。避免此問題的一種常用的方法是包裝在一個Immediately Invoked Function Expression(IIFE)每片的代碼來創建爲每個腳本標籤的範圍:由於每個代碼塊被包裹在一個函數

<script> 
    (function() { 
     var counter1 = whatever; 
     //do stuff to counter1 
    })(); 
</script> 

<script> 
    (function() { 
    var counter1 = whatever; //different than the other counter1, exp follows 
    //do whatever 
    })(); 
</script> 

(它創建了一個在該函數中定義的var的新範圍)兩個'counter1's實際上是不同的變量。請注意,除非明確地返回它們,否則不能訪問另一個IIFE包裝塊中的內容,請參見revealing module pattern

+0

感謝您的更好的解釋,我一直在撞我的屁股整天得到這個完成,我不是很好用javascript – user3476168

+0

沒問題。理解範圍(以及''this'指針的相關機制)是javascript中最令人困惑的兩件事情,因爲它們以微妙的方式與其他語言不同。你的一半時間用任何語言編寫代碼總是被降級到解決其不足之處。 –

0

這是因爲你count聲明互相重寫。更改你的count變量之一的名稱,它應該工作。

+0

你能幫助你使用上面提供的代碼的這個解決方案嗎? – user3476168

+0

您不需要示例,只需將其中一個計數變量的名稱更改爲count1即可。我看到你只是改變了其中一個實例。 – dzylich

1

我想你可以包裝在IFEE代碼塊,即

(function(){ 
    //code here 
}()); 
+0

你搖滾,它像魅力 – user3476168