2013-08-27 5 views
0

Я пытаюсь сделать некоторые проверки для пользователя, который выбирает элементы из списка. Я хочу убедиться, что элемент не добавляется дважды, проверяя, находится ли <li> в массиве. Это то, что я пытаюсь и не работает.итерация по массиву в jquery

$(".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); 


}); 
+0

Вы также можете использовать обычный цикл, что, вероятно, быстрее. – Jeffpowrs

+0

Я не знаю, важно ли это для вашего использования, но Array.forEach не поддерживается в IE 8 и ниже. [Ссылка разработчика Mozilla] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FforEach) – hradac

+0

Я читал это. Я могу перейти к '.each()' – rogerthat

ответ

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"); 
} 
+0

ОК. позвольте мне разобраться в этом. Мое первое предупреждение? 'alert (itemtoadd + name); // проверка' и где идет сообщение об ошибке, в 'else'? – rogerthat

+0

Кроме того, пользователь может добавить до 4 элементов, поэтому я не просто проверяю один элемент. Каждый раз, когда элемент добавляется, мне нужно проверить, уже ли он в div. – rogerthat

+0

Да, извините - я обновил ответ, чтобы отразить добавление сообщения об ошибке. ... И да - я понимаю, это то, что вы пытаетесь сделать. Я просто говорил, что ваш код в письменном виде не делает этого. Каждый раз, когда добавляется элемент, вы создаете * новый экземпляр * checkArr'. – pkh

Смежные вопросы