好的,所以我试图在一堆匿名div中存储两个数据,这些div被附加到父div:
var $timepicker = $('<div class="timepicker"></div>');
var startTime = new Date(0, 0, 0, 0, 0, 0, 0);
var endTime = new Date(0, 0, 0, 23, 60 - settings.step, 0, 0);
for (var time = startTime; time <= endTime; time.setMinutes(time.getMinutes() + 30)) {
$timepicker.append($('<div></div>').data('time', time));
}
然而,在运行for循环之后,对于每个div,数据的值('time')总是等于最后一次的值(而它应该等于它最初设置的时间,明显)。我已经搜索了互联网的线索,但似乎没有其他人遇到这个问题。到底是怎么回事?是因为我使用的是匿名div吗?非常感谢您的帮助。
谢谢,
丹尼尔
答案 0 :(得分:1)
对于那些好奇的人来说,事实证明它没有用,因为JS在每个div中持有引用时间,而不是传递的值。这是因为JS只将简单类型作为值传递;对象作为引用传递。解决方法是在每次迭代时实例化一个新的Date对象:
var $timepicker = $('<div class="timepicker"></div>');
var startTime = new Date(0, 0, 0, 0, 0, 0, 0);
var endTime = new Date(0, 0, 0, 23, 60 - settings.step, 0, 0);
for (var time = startTime; time <= endTime; time.setMinutes(time.getMinutes() + 30)) {
$timepicker.append($('<div></div>').data('time', new Date(0, 0, 0, time.getHours(), time.getMinutes(), 0, 0)
}
答案 1 :(得分:0)
使用appendTo
。 append
不返回jQuery对象
$('<div></div>').appendTo($timepicker).data('time', time));