Обновление 2013-03-13:
Во-первых, перечитывая ОП, я теперь не понимаю, действительно ли я отвечаю на вопрос, поскольку они специально спросили, как изменить плагин tag-it , чтобы выполнить два твика. Если ОП действительно хочет изменить плагин, это нормально, но, как я уже говорил, кажется, что вам нехорошо - а вам нет!
Так вот, как выполнить обе вещи без изменения плагина:)
во-первых, вам нужно иметь какой-то глобальный массив для размещения вещей, если есть лучший способ сделать это, lmk, но в противном случае:
var returnUsers = [];
Тогда:
$("#ccList").tagit({
autocomplete: {
source: function( request, response ) {
$.ajax({
url: "http://[your server]/user_lookup",
dataType: "json",
data: {
term: request.term
},
success: function( data ) {
returnedUsers = data;
response( $.map( data, function( item ) {
return {
label: item,
value: item
}
}));
},
error: function(xhr, status, error) {
returnedUsers = [];
}
});
}
},
beforeTagAdded: function(event, ui) {
if ($.inArray(ui.tagLabel, returnedUsers)==-1)
return false;
if ($(".tagit-choice").length >= 5)
return false;
}
});
Таким образом, в основном вы должны указать autocomplete.source на функцию, в которой вы обрабатываете все содержимое ajax и создаете свой собственный список. Обратите внимание, что это дает вам некоторую гибкость в том, что вы возвращаете из своего cgi-сервера (т. Е. Он не имеет как массив строк, это может быть массив хешей, которые вы анализируете и создаете в пользовательский список). Также обратите внимание, что в этом не было бы необходимости, если бы я только мог найти способ получить доступ к списку возвращаемых значений из более простой функции автозаполнения в событии beforeTagAdded - то, что подразумевал Джек, было возможно, но не уточняло.
Как только вы построите массив вещей для отображения, вы возвращаете его с помощью функции response (). В то же время теперь у вас есть копия этого списка в returnUsers, которую вы можете использовать в функции beforeTagAdded. Кроме того, очень просто ограничить количество тегов, которые вы разрешаете в блоке, просто посчитав, сколько их уже там, и вернув false, если это> = для этого числа. Не уверен, что это лучший способ получить счет, но он определенно работает.
Я знаю, что это старо, и я уверен, что любой эксперт найдет миллион способов сделать это лучше меня, но я не нашел никого, кто бы изложил, как обойти эту проблему лучше, чем я изложил без фактического изменения плагина, что я не предпочитаю делать. НТН!