2013-11-13 7 views
5

Я работаю над интерфейсом, который позволяет пользователю выбирать несколько «карт». Каждая карта имеет атрибут «имя-имя-имя» и может также иметь соответствующий пункт меню. Если они выбирают карту в главном окне, она также выделяет пункт меню. Когда что-то щелкают, я добавляю к нему класс «selected». Затем я получаю все «выбранные» элементы и подсчитываю уникальные атрибуты имени данных, чтобы получить количество выбранных фактических элементов.Функция JQuery Unique() не работает должным образом

Это очень хорошо работает при выборе до 5 предметов. По какой-то причине, на 6-м элементе функция unique(), похоже, перестает работать правильно. Я не смог дублировать эту проблему с помощью jsfiddle, но код был немного менее сложным, так как локально я также занимаюсь «типами», но я думаю, что это не имеет отношения к проблеме.

Итак, вот несколько скриншотов соответствующих массивов после того, как я выбрал 5-й элемент.

Здесь вы видите ВСЕ выбранные предметы. Их 10, как и ожидалось. Эта точка останова перед вызовом unique(). Here you see ALL selected items. There are 10, as expected.

Здесь вы видите уникально выбранные предметы. Их 5, как и ожидалось. Here you see unique selected items. There are 5, as expected.

И тогда я выбираю 6-один ... 12, как и ожидалось ... And then I select the 6th one...

Aaand теперь у нас есть таинственный дубликат! Почему ??? enter image description here

Это происходит последовательно; каждый раз. И обратите внимание, что не имеет значения, какой элемент я выбираю последним. Я добавил целых 10 фиктивных элементов, и это всегда шестой, с которым он запутывается.

ответ

18

Взятые из jQuery.unique():

Описание: сортирует массив элементов DOM, в месте, с дубликатами удалены. Обратите внимание, что это работает только с массивами элементов DOM, а не с строками или номерами.

Если вы хотите получить уникальный массив строк или чисел, вам нужно будет использовать свою собственную функцию. Вот один взятый из a previously answered question similar to yours:

function unique(array) { 
    return $.grep(array, function(el, index) { 
     return index == $.inArray(el, array); 
    }); 
} 
+0

Я просто читал этот вопрос, когда вы отправляли сообщение. Благодаря! –

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