我想用函数更改公共变量的值,并使用其他函数中的新值。
我的用例:我想为倒计时器设置一个默认的公共变量,如果用户想要更改目标日期,他可以设置一个新的日期。为此,我创建了另一个更改公共变量的函数,但它似乎并不完美。
这是我的代码:
<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>
问题在于,当我更改日期时,我的第二个功能不会采用新值。
答案 0 :(得分:0)
这不起作用,因为您在对象文字上传递值(首先指向undefined
),所以当您alertVal
时功能&#34;更新&#34;值,它使一个指向新值的赋值(即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!!
});