【发布时间】:2016-04-25 02:23:20
【问题描述】:
https://jsfiddle.net/mpcbLgtt/2/
我在做什么:一个函数,当一个类 card 的 div 被点击时,它应该将它的名字添加到一个名为 deck 的数组中,并将它的 id 添加到一个名为 cardIds 的数组中。
这是卡片:
<div class='card' id='1' name='dinosaur'>Dinosaur</div>
<div class='card' id='2' name='crab'>Crab</div>
如果阵列中已经有 2 张这张卡,那么它应该什么都不做。
如果没有卡片,那么它会将一个deckItem div 附加到decklist div 上。
<div class="decklist"></div>
这就是问题所在。如果数组中已经有 1 张卡片,我不想将卡片附加到 'decklist' div,而是删除前一张卡片并添加一张上面有“x2”的新卡片。
此时的代码可以删除之前的卡。但是,当它附加以下代码时,它会执行两次。例如。我单击一张名为“Dinosaur”的卡片,它会将其附加到数组中。然后,如果我再次单击卡片“恐龙”,它将输出“恐龙 x2”“恐龙 x2”,而不仅仅是“恐龙 x2”
$(".decklist").append($replacement);
完整的代码如下。
var deck = [];
var cardIds = [];
$(".card").click(function(){
$cardName = $(this).attr("name");
$cardId = $(this).attr("id");
$occurances = 0;
for (var i = 0; i<deck.length; i++) {
if (deck[i]==$cardName) {
$occurances++;
}
}
//if there are less than 2 of this card in deck array
if ($occurances<2) {
//add the card to array
deck.push($cardName);
cardIds.push($cardId);
deck.sort();
//empty the decklist div
$(".decklist").empty();
//go through all the cards in the deck array.
//if that card appears once append it else replace it
for (var i = 0; i < deck.length; i++) {
//count the number of times this card is in the deck array
$count = 0;
for (var k = 0; k < deck.length; k++) {
if (deck[k] == deck[i]) {
$count++;
}
}
if ($count == 1) {
//this runs once
var $toBeAppended = $("<div class='deckItem' id='"+cardIds[i]+"'>"+deck[i]+"</div>");
$(".decklist").append($toBeAppended);
} else {
//this runs twice
var $replacement = $("<div class='deckItem' id='"+cardIds[i]+"'>"+deck[i]+" x2</div>");
$(".decklist").remove(".deckItem#"+cardIds[i]);
$(".decklist").append($replacement);
}
}
}
【问题讨论】:
-
你是否绑定了多次点击?
-
它在一个循环中,所以每次迭代都会评估
if。创建复制问题的基本演示。我们很难在各种场景下对您的应用进行心理评估
标签: javascript jquery arrays append