【发布时间】:2013-04-06 15:53:48
【问题描述】:
我很困惑为什么当我尝试在 for 循环中附加多个元素时只插入最后一个元素。
我创建了一个 JsFiddle 来展示我无法让它工作。我希望插入 100 个锚标记,但只插入最后一个元素。
为了后面的缘故,这里是相关的 JavaScript,TODO 标记了相关部分:
Math.randomNumber = function(max) {
return Math.round(Math.random() * max % max);
}
var Door = {
$el: $('<a>', {
class: 'door selectable'
}),
number: null,
isSelected: false,
containsZonk: true,
bind: function () {
var that = this;
this.$el.on('click tap', function () {
that.isSelected = true
});
}
}
var Platform = {
$el: null,
doorCount: null,
jackpotNumber: null,
doors: [],
init: function($el, doorCount) {
this.$el = $el;
this.doorCount = doorCount;
for (var i = 0; i <= doorCount - 1; i++) {
var door = Object.create(Door);
door.number = i;
door.$el.html(i.toString());
this.doors.push(door);
/* TODO: wtf why is only last one inserted? */
this.$el.append(door.$el);
}
this.jackpotNumber = Math.randomNumber(doorCount);
this.doors[this.jackpotNumber].containsZonk = false;
}
}
$(document).ready(function(){
var platform = Object.create(Platform);
var $game = $('.door_game');
platform.init($game, 100);
});
我想将所有 100 个元素插入到div.door_game:
<body>
<h1>Zonk!</h1>
<div class="door_game" data-doors="10">
</div>
</body>
【问题讨论】:
-
您可能需要将
Math.round(Math.random() * 100 % 100)更改为Math.round(Math.random() * max % max) -
@razzak 是的,我在准备问题时也注意到了这一点,但没有必要解决我真正的问题。尽管如此,还是感谢您指出这一点。
-
当所有
door对象都具有此属性containsZonk: true,时,这也没有意义this.doors[this.jackpotNumber].containsZonk = true;!你可能想把它改成cotainsZonk: false,? -
@razzak 是的,你又是对的。 :D
标签: javascript jquery append