0

我正在尝试对从列表中选择项目的用户进行一些验证。<li>我想通过检查是否已经在数组中来确保一个项目没有被添加两次。这是我正在尝试的,但它不起作用。

 $(".List").on("click", "li", function () {
 var i = 0;
 var checkArr = [];

 var div = $("#AddedItems");
 var parent = $(this).closest("ul");
 var itemtoadd = parent.find("[data-id]").attr("data-id");
 var name = parent.find("[data-name]").attr("data-name");

 alert(itemtoadd + name);//checking 

 var itemtoadd = ("<li id = " + itemtoadd + " class = \"itemAdd\">" + name + "</li>");

 checkArr.push(itemtoadd); //put one in to check against?
 checkArr.forEach(item)
 {
     if (item == itemtoadd)
         alert("this item has already been added");
     else {
         checkArr.push(itemtoadd);
         alert(itemtoadd);
         $(itemtoadd).appendTo(div);
     }
 }
 // div.html(itemtoadd);


 });
4

1 回答 1

1

你在这里至少有三个问题:

  1. 您没有Array.forEach正确使用-它需要一个带有项目的功能。
  2. 在您进行检查之前,您正在添加您正在寻找的项目。你总是会碰到alert案子。
  3. 您将checkArr其用作局部变量——每次输入函数时都会得到一个空数组。

话虽如此,您完全可以在不保留数组的情况下实现目标。我相信您可以用以下方式替换从第一个警报开始的所有内容:

if ($('#' + itemtoadd, div).length == 0) {
    itemtoadd = ("<li id = " + itemtoadd + " class = \"itemAdd\">" + name + "</li>");
    div.append(itemtoadd);
}
else {
    alert("this item has already been added");
}
于 2013-08-27T19:57:49.690 回答