2016-02-25 2 views
1

Я хочу изменить значение открытых переменных с помощью функции и использовать эти новые значения из другой функции.Изменение значения переменной public javascript

Мой прецедент: я хочу установить общедоступную переменную по умолчанию для таймера обратного отсчета, и если пользователь хочет изменить целевую дату, он может ввести новую дату. Для этого я создал другую функцию для изменения общедоступных переменных, но она не работает отлично.

Вот мой код:

<table id="global" border="3"> 
    <tr> 
     <td align="center"> 
      <form name="formInput" action="#"> 
       <label>Choose new Date: </label> 
       <input type="date" name="field1" Id="txtvarInput" /> 
       <br /> 
       <br /> 
       </label> 
       <div class="form-actions" "span3"> 
        <input name="submit" type="submit" class="btn" value="Select" onclick="alertVal()" /> 
       </div> 
      </form> 
     </td> 
    </tr> 

    <tr id="countdownTimer"> 
     <td> 
      <script type="application/javascript"> 
       var current = "Has been launched!"; //-->enter what you want the script to display when the target date and time are reached, limit to 20 characters 
       var year; 
       var month; 
       var day; 
       var hour = 0; 
       var minute = 0; 
       var second = 0; 
       var ampm = "pm"; 
       var timezone = -5; 

       function alertVal() { 
        var theInput = document.getElementById('txtvarInput').value; 
        var date_array = new Array(); 
        date_array = theInput.split("-"); 
        month = date_array[1]; 
        year = date_array[0]; 
        day = date_array[2]; 
       } 


       var Countdown_Ignition = new Countdown({ 
        width: 300, 
        height: 60, 
        year, 
        month, 
        day, 
        hour, 
        ampm, 
        minute, 
        second, 
        timezone, 
        rangeHi: "day", 
        style: "flip" // <- no comma on last item!! 
       }); 
      </script> 
     </td> 

Вопрос заключается в том, что, когда я изменить дату, моя вторая функция не принимает новые значения.

+2

Обратите внимание, что аргумент 'new Countdown()' недействителен. – Arvind

+0

@Arvind Он действителен в ES6, используя текстовую сокращенную обозначение объекта. – Barmar

+0

Javascript не имеет общедоступных переменных, вы имеете в виду глобальные переменные? Какие переменные не изменяются? – Barmar

ответ

0

это не работает, потому что вы передаете значение на литерал объекта (указывая на undefined на первом), так что, когда вашу alertVal функции «обновление» значение, это делает задание, указывая на новое значение (т.е. 22).

Если вы хотите отследить изменение внутри объекта Countdown, вам необходимо передать переменную, которая указывает на фактический объект (ссылку, а не значение). Итак, ваша глобальная функция обновляет свойство одного и того же объекта, и вы выигрываете!

var publicObject = { 
    year: null, 
    day: null, 
    etc: null 
}; 

function setData(){ 
    publicObject.day = 'new value'; 
    publicObject.year = 'new value'; 
    publicObject.etc = 'and so on'; 
}; 

var Countdown_Ignition = new Countdown({ 
              width:300, 
              height:60, 
              publicObject, 
              rangeHi:"day", 
              style:"flip"  // <- no comma on last item!! 
             }); 
+0

Привет, спасибо за подсказку, однако, я думаю, причина в том, что когда я нажимаю кнопку выбора после выбора даты перезагрузки страницы, и все переменные инициализируются! любая идея, почему перезагрузка страницы и как это можно предотвратить. Благодаря! –

+0

Да, вы используете кнопку 'submit', поэтому форма отправляется после нажатия ... с помощью метода onclick =" "вы должны« возвращать false »в своей функции' alertVal() ', чтобы отменить по умолчанию нажмите кнопку, чтобы избежать отправки. – sminutoli

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