2015-10-18 74 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