2015-10-18 2 views
0

Как я могу использовать приведенный ниже код, чтобы отображать приращение переменной, не затрагивая друг друга, я попытался использовать скрипт на той же странице, чтобы отображать разные значения, которые увеличивают время работы, но я получаю одинаковые значения в div1 и div2 даже подумал, что у них разный var, код ниже отлично работает, когда я использую их на отдельных страницах, но когда я собираю их на одной странице, я получаю одинаковый результат для обоих 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 имеет один глобальный охват с не знание модулей или пространств имен. Любой var объявлен в верхней области видимости script тега в глобальном пространстве имен, так что ваш код работает, как если бы вы написали:

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 s, определенная в этой функции), два «counter1» - фактически разные переменные. Обратите внимание, что вы не можете получить доступ к вещам в одном обойденном блоке IIFE в другом, если вы явно не возвращаете их, см. Раздел revealing module pattern.

+0

Спасибо за лучшее объяснение, я натыкался на задницу весь день, чтобы сделать это, я не так хорош с javascript – user3476168

+0

Нет проблем. Понимание сферы действия (и связанной с ней механики указателя 'this') - две из самых запутанных вещей в javascript, потому что они отличаются от других языков тонким образом. Половина вашего времени кодирования на любом языке довольно неизменно отводится для устранения недостатков. –

0

Это потому, что ваш count декларации переписывают друг друга. Измените имя одной из ваших count переменных, и оно должно работать.

+0

Вы можете помочь с этим решением вашей проблемы с использованием приведенного выше кода? – user3476168

+0

Вам не нужен пример, просто измените имя одной из переменных count на count1. Я вижу, вы только изменили один из экземпляров. – dzylich

1

Я думаю, вы могли бы обернуть блоки кода в IFEE, т.е.

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

Ты качаешься, он работал как шарм – user3476168

Смежные вопросы